Oft ist es sehr praktisch, per Tunnel auf Services zu Hause oder auf einem Server zuzugreifen.
Beispiel: Du betreibst auf einem Server, den du per SSH verwaltest, eine MySQL-Instanz. Sie ist nicht ins Internet exponiert und lauscht nur auf localhost. Jetzt willst du mit deinem SQL-Lieblingstool auf die Datenbank zugreifen.
Klar, das ginge per VPN – aber die sind nicht leicht korrekt einzurichten. Da du den Server ohnehin über SSH verwaltest, hast du bereits ein einfaches Werkzeug zur Hand: einen Port-Tunnel durch SSH. Das ähnelt dem Port-Forwarding, das du vielleicht vom Heim-Router kennst. Ziel ist ein Port auf deiner Maschine, der auf einen Port einer entfernten Maschine weitergeleitet wird.
Das geht so:
$ ssh -f user@mydomain.com -L <port>:<remote host>:<remote port> -NParameter:
-f Führt den Befehl im Hintergrund aus, blockiert deine
Terminal-Session also nicht.
Achtung: Der Tunnel bleibt offen, solange du das Netzwerk
nicht trennst oder den SSH-Prozess killst.
Ohne diesen Parameter schliesst du die Verbindung mit
<Ctrl>+C und beendest damit den SSH-Tunnel.
user@mydomain.com Benutzername und Host deines SSH-Servers.
-L Erzeugt den Tunnel statt einer normalen SSH-Session.
<port> Lokaler Port auf deiner Maschine, der aufs entfernte System
weitergeleitet wird.
<remote host> Host des Services, mit dem du dich verbinden willst; kann der
SSH-Host sein, meist aber der Host der MySQL-Instanz.
<remote port> Port auf dem entfernten Host, zu dem der Tunnel verbindet.
Bei MySQL wäre das 3306.
-N Wir wollen auf dem entfernten System nichts ausführen, nur
einen Tunnel aufbauen.Für einen PostgreSQL-Server sähe das so aus:
$ ssh -f marcel@metawave.ch -L 5432:localhost:5432 -Nund bei einem MySQL-Server:
$ ssh -f marcel@metawave.ch -L 3306:localhost:3306 -NNach Eingabe des Passworts steht die Tunnel-Verbindung. Jetzt greifst du auf den entfernten Service zu, als liefe er auf deiner lokalen Maschine. In deinem SQL-Tool gibst du als Hostname localhost ein und verbindest dich wie auf dem entfernten System.
Nebenbei verbessert das die Server-Sicherheit: Statt zu viel nach aussen zu exponieren, verbindest du dich über einen sicheren SSH-Tunnel und greifst von dort auf deine Services zu.