From 31ebf01b0b8f570e4d2bbcb0e25c30c6d3f59f8d Mon Sep 17 00:00:00 2001 From: Roger Rutishauser Date: Wed, 4 Dec 2024 11:26:58 +0100 Subject: [PATCH] update --- ssh/README.md | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/ssh/README.md b/ssh/README.md index 9387922..8f80937 100644 --- a/ssh/README.md +++ b/ssh/README.md @@ -94,29 +94,23 @@ Dies ist z.B. nützlich, wenn man 2 WSL-Instanzen am Laufen hat, und man mit ssh Verbindung von WSL A nach B: `ssh user@localhost -p 2222`. Nicht vergessen, den public key in `authorized_keys` von WSL B hinterlegen. -## SSH Tunnel +## Local Port Forwarding -### Remote Port Forwarding - -[SSH Remote Port Forwarding](https://gitlab.com/armindoerzbachtbz/cloud-native-bootcamp/-/blob/main/ssh/N2/ssh_remote_port_forwarding.md) - -### Local Port Forwarding - -Hier wird ein Port auf dem Host A verwendet, um auf einen Dienst auf einem Remote Host B zugreifen zu können, der ansonsten nicht von aussen erreichbar wäre. +Hier wird ein Port auf dem Laptop verwendet, um auf einen Dienst auf einem Remote Host B zugreifen zu können, der ansonsten nicht von aussen erreichbar wäre. Annahme: Auf dem Host B ist ein Dienst installiert, den man nur von dort aus erreichen kann. Z.B. läuft dort mysql auf Port 3306, aber Remote-Verbindungen sind nicht erlaubt (Achtung myql kann so eingerichtet sein, dass es eh nicht geht, weil über socks file... aber ist eine andere Geschichte.) Mit folgendem SSH-Befehl kann dies umgangen werden: ``` +ssh -L [local_port]:[destination_address]:[destination_port] [username]@[ssh_server] ssh -L 33333:127.0.0.1:3306 rogrut@v2202306200871231373.supersrv.de ``` -`33333` ist der lokale Port auf Host A. Als Verbindungsparameter in mysql workbench würde man 127.0.0.1:33333 angeben. `127.0.0.1:3306` ist mysql, der auf dem Host B läuft - von dort her gesehen auf localhost, also 127.0.0.1. `rogrut@v2202306200871231373.supersrv.de` schliesslich ist Benutzername und Adresse des Hosts. -Dabei wird man auch gleich auf dem Server engeloggt. In einem zweiten Terminal von Host A kann man dann über den lokalen Port auf den Dienst auf Host B zugreiffen. -Auf dem Host A ist somit `127.0.0.1:33333` gleichbedeutend wie auf dem Host B mit `127.0.0.1:3306`. So können Firewalls umgangen werden, weil `v2202306200871231373.supersrv.de:3306` nicht geöffnet ist. +`33333` ist der lokale Port auf dem Laptop. Als Verbindungsparameter in mysql workbench würde man 127.0.0.1:33333 angeben. `127.0.0.1:3306` ist mysql, der auf dem Host B läuft - von dort her gesehen auf localhost, also 127.0.0.1. `rogrut@v2202306200871231373.supersrv.de` schliesslich ist Benutzername und Adresse des Hosts B. +Dabei wird man auch gleich auf dem Server engeloggt. In einem zweiten Terminal vom Laptop kann man dann über den lokalen Port auf den Dienst auf Host B zugreiffen. -Sobald die Verbindung steht, kann auf dem Host A eine Verbindung zu mysql auf Host B hergestellt werden. +Auf dem Laptop ist somit `127.0.0.1:33333` gleichbedeutend wie auf dem Host B mit `127.0.0.1:3306`. So können Firewalls umgangen werden, weil `v2202306200871231373.supersrv.de:3306` nicht geöffnet ist. Es wären auch Verbindungen zu mysql DBs möglich, die in Docker laufen, z.B. unter `63003`, oder sogar unter anderen IPs. @@ -128,7 +122,7 @@ CONTAINER ID IMAGE COMMAND CREATED STATUS ssh -L 33333:127.0.0.1:63003 rogrut@v2202306200871231373.supersrv.de ``` -#### Port öffnen ohne Login in Shell +### Port öffnen ohne Login in Shell Um zu verhindern, dass man eingeloggt wird, also nur den Port 33333 zu öffnen, müssen noch zusätzliche Parameter angegeben werden: `-LNf`, also `ssh -LNf 33333:127.0.0.1:3306 rogrut@v2202306200871231373.supersrv.de` Nicht vergessen den Port wieder zu schliessen. @@ -153,6 +147,15 @@ und dann Prozess killen: kill 9973 ``` +## Remote Port Forwarding +Auch bekannt als "reverse tunneling", um von einem Host B eine sichere Verbindung auf einem lokalen Computer zu machen. Traffic wird von einem spezifischen port auf Host B an einen bestimmten Port auf dem Laptop geleitet. + +To initiate remote port forwarding, the user configures an SSH connection to the remote server with the -R option followed by the forwarding specifications. The syntax for setting up remote port forwarding is: + +``` +ssh -R [remote_port]:[destination_address]:[local_port] [username]@[ssh_server] +``` + ## Dynamic Port Forwarding ### SSH Socks Proxy