EMZETT.
Login

SSH-Tunnel und Portweiterleitung

Kurz: Mit SSH lassen sich beliebige Netzwerkverbindungen verschlüsselt durch eine bestehende SSH-Verbindung leiten, etwa um an einen sonst unerreichbaren Dienst zu kommen.

Genauer: SSH schützt nicht nur Fernzugriff auf die Kommandozeile. Mit Portweiterleitung (Port Forwarding) baut es einen verschlüsselten Tunnel, durch den andere Programme ihren Verkehr schicken. Das ist praktisch, um Dienste, die nur im internen Netz erreichbar sind oder keine eigene Verschlüsselung haben, sicher zu nutzen.

Im Detail

Lokale Weiterleitung (-L)

Ein Port auf dem eigenen Rechner wird zu einem Ziel hinter dem Server weitergeleitet:

ssh -L 5433:localhost:5432 nutzer@server

Danach erreicht ein Programm auf deinem Rechner unter localhost:5433 die Datenbank, die auf dem Server nur an localhost:5432 lauscht. Typischer Fall: Datenbank oder Admin-Oberfläche nicht öffentlich ins Internet stellen, sondern per Tunnel nutzen.

Entfernte Weiterleitung (-R)

Ein Port auf dem Server wird zu deinem Rechner geleitet:

ssh -R 8080:localhost:3000 nutzer@server

So ist die lokale Entwicklungsseite (Port 3000) über den Server auf Port 8080 erreichbar, auch wenn dein Rechner hinter NAT oder CGNAT liegt, weil die Verbindung von innen nach außen aufgebaut wird.

Dynamische Weiterleitung (-D)

ssh -D 1080 nutzer@server

Auf Port 1080 entsteht ein SOCKS-Proxy. Stellt man den Browser darauf ein, läuft der gesamte Webverkehr verschlüsselt über den Server, ähnlich einem einfachen VPN.

Hinweise

Mit -N wird kein Terminal geöffnet, nur getunnelt; -f schickt die Verbindung in den Hintergrund. Mit einem Jump Host (-J bastion) erreicht man Rechner, die nur über einen Zwischenserver zugänglich sind. Tunnel hebeln Firewall-Regeln aus, daher sollte der Server sie nur Berechtigten erlauben (AllowTcpForwarding in sshd_config). Für dauerhafte Tunnel nimmt man autossh oder einen systemd-Dienst.

Siehe auch: SSH, SSH unter Linux, VPN, NAT