SSH-Tunnel ermoeglichen sicheren Zugriff auf entfernte Dienste ueber verschluesselte Verbindungen. Sie nutzen die bestehende SSH-Infrastruktur, erfordern keine zusaetzliche Software und koennen Dienste zugaenglich machen, die sonst nur aus dem internen Netzwerk erreichbar sind. Sie ersetzen praktisch VPNs fuer einfache Szenarien wie den Zugriff auf Datenbanken, Webanwendungen oder Admin-Interfaces hinter einer Firewall.
Local Forwarding¶
ssh -L 5433:localhost:5432 user@db-server
ssh -L 8080:internal-app:80 user@bastion
Local Forwarding oeffnet einen Port auf Ihrem lokalen Rechner und leitet den Verkehr ueber SSH zum Zielserver. Das erste Beispiel macht PostgreSQL auf dem db-server als localhost:5433 verfuegbar. Das zweite Beispiel stellt eine interne Anwendung ueber einen Bastion-Host bereit. Der Vorteil ist, dass der Zieldienst nicht aus dem Internet erreichbar sein muss — es genuegt, dass der SSH-Server darauf zugreifen kann.
Remote Forwarding¶
ssh -R 8080:localhost:3000 user@public-server
Remote Forwarding funktioniert umgekehrt — es macht einen lokalen Dienst ueber einen entfernten Server zugaenglich. Typischer Anwendungsfall: Sie haben einen Entwicklungsserver hinter NAT und moechten ihn voruebergehend einem Kollegen ueber einen oeffentlichen Server freigeben. Port 3000 auf Ihrem Rechner wird als Port 8080 auf dem oeffentlichen Server verfuegbar.
Dynamic (SOCKS)¶
ssh -D 1080 user@ssh-server
curl --socks5 localhost:1080 http://internal.local
Dynamic Forwarding erstellt einen SOCKS-Proxy, ueber den beliebiger Verkehr geleitet werden kann. Ein Browser oder eine Anwendung, die auf SOCKS-Proxy localhost:1080 konfiguriert ist, greift auf das Netzwerk aus der Perspektive des SSH-Servers zu. Nuetzlich fuer den Zugriff auf ein gesamtes internes Netzwerk, ohne fuer jeden Dienst einen separaten Tunnel erstellen zu muessen.
Jump Host¶
ssh -J bastion user@internal-server
# ~/.ssh/config
Host internal-\*
ProxyJump bastion
Ein Jump Host (Bastion) dient als Vermittler fuer den Zugriff auf interne Netzwerke. SSH-Konfiguration mit ProxyJump ermoeglicht transparente Verbindungen ueber den Bastion — einfach ssh internal-server und SSH leitet automatisch ueber den Bastion.
Dauerhafte Tunnel¶
autossh -M 0 -f -N -L 5433:localhost:5432 user@db-server
Fuer den Produktionseinsatz ist autossh unverzichtbar — es startet den Tunnel automatisch bei Verbindungsabbruch neu. Alternativ erstellen Sie eine systemd-Service-Unit fuer einen dauerhaften Tunnel mit automatischem Neustart und Logging.
SSH-Tunnel = Sicherer Zugang¶
Fuer einfache Szenarien ersetzen SSH-Tunnel VPNs. Fuer komplexere Topologien oder teamweiten Zugriff sollten Sie WireGuard oder Tailscale in Betracht ziehen.