SSH-Tunneling (Port-Forwarding) ermöglicht es, einen Netzwerkport von einem entfernten Server sicher auf eine andere Maschine weiterzuleiten — der gesamte Datenverkehr wird verschlüsselt und es wird keine zusätzliche Software außer einem Standard-SSH-Client benötigt.
SSH-Tunneling funktioniert als dreiteilige Kette. Stellen Sie es sich wie eine Weiterleitung über einen Relay-Server vor — Sie verbinden sich mit dem mittleren Server, der den Datenverkehr transparent an das Ziel weiterleitet:
| Teil | Rolle | Beispiel |
|---|---|---|
| Near | Ihr lokaler Rechner — baut den Tunnel auf | Ihr Laptop / Workstation |
| Middle | Ein Zwischenserver, zu dem Sie per SSH verbinden können — er stellt den weitergeleiteten Port bereit | 209.239.112.134 |
| Far | Das eigentliche Ziel — der Server, auf dem der gewünschte Dienst läuft | server935 |
Der entscheidende Vorteil: Far muss nicht öffentlich erreichbar sein. Solange Middle zu Far und Sie zu Middle eine Verbindung aufbauen können, schlägt der Tunnel die Brücke.
Der Tunnel-Befehl nutzt folgende SSH-Flags:
| Flag | Bedeutung |
|---|---|
| -N | Kein Remote-Befehl ausführen — die Verbindung bleibt ausschließlich für das Port-Forwarding offen, ohne in eine Shell zu wechseln. |
| -L | Lokales Port-Forwarding — bindet einen Port auf dem mittleren Server und leitet den Datenverkehr zum Zielserver weiter. Format: bind-address/lokaler-port/ziel-server/ziel-port |
| -f | Optional — startet SSH im Hintergrund. In Kombination mit -N läuft der Tunnel als Hintergrundprozess. |
| -v | Optional — ausführliche Ausgabe, hilfreich bei der Fehlersuche. |
Ersetzen Sie die Platzhalter durch Ihre tatsächlichen Server-Adressen, IP-Adressen und Portnummern:
Dieses Beispiel öffnet Port 110 auf dem mittleren Server (209.239.112.134) und leitet alle Verbindungen zu Port 22 (SSH) auf dem Zielserver (server935) weiter:
Jede Verbindung zu 209.239.112.134:110 wird transparent zu server935:22 weitergeleitet — der SSH-Dienst des Zielservers ist damit über den mittleren Server erreichbar.
Mit dem Flag -f wird der Tunnel im Hintergrund gestartet, sodass das Terminal frei bleibt:
Um einen Hintergrund-Tunnel zu beenden, suchen Sie die Prozess-ID und beenden ihn:
Der Tunnel bleibt aktiv, solange die SSH-Verbindung aufrechterhalten wird. Bricht die Verbindung ab, muss der Befehl erneut ausgeführt werden. Für persistente Tunnel mit automatischem Reconnect empfiehlt sich das Tool autossh.
| Problem | Ursache & Lösung |
|---|---|
| Verbindung zum weitergeleiteten Port wird abgelehnt | Die Firewall des mittleren Servers blockiert den Port. Port in iptables oder nftables auf dem mittleren Server öffnen. |
| Tunnel verbindet sich, bricht aber sofort ab | SSH-Keepalive ist möglicherweise nicht konfiguriert. ServerAliveInterval 30 in ~/.ssh/config hinzufügen. |
| Port-Forwarding wird vom Server abgelehnt | Der mittlere Server hat möglicherweise AllowTcpForwarding no in seiner /etc/ssh/sshd_config. Auf yes setzen und den SSH-Dienst neu starten. |
| Binding an die IP des mittleren Servers schlägt fehl | SSH bindet standardmäßig nur an localhost. GatewayPorts yes in der /etc/ssh/sshd_config des mittleren Servers setzen, damit Binding an die öffentliche IP möglich ist. |
Die vollständige Referenz aller SSH-Port-Forwarding-Optionen finden Sie im offiziellen OpenSSH-Handbuch.