SSH kann dazu verwendet werden, Ports von und zu anderen Geräten weiterzuleiten. So kann zum Beispiel via SSH auf eine Datenbank auf einem Server zugegriffen werden, welche sonst nur Verbindungen von sich selber akzeptiert. Ein anderer Anwendungsfall wäre die Bereitstellung eines Dienstes in einem Netzwerk, welches die Clients im Netz wo der Server steht sonst keinen Zugriff hätte. Dies geht über ein (längeren) SSH-Befehl. Braucht man das öfters, lohnt sich die Konfiguration in der Datei ssh_config.
Local Forwarding
Der Port port auf der lokalen Seite wird auf den Host host auf den Port hostport auf der remote Seite weitergeleitet. Auf der lokalen Seite ist danach der Port port auf der Adresse bind_address (default: 127.0.0.1) im Listen-Mode.
Syntax:
Beispiel: Der SSH-Client stellt den Port 80 des HTTP-Servers auf dem SSH-Server auf Port 8080 bereit:
Image may be NSFW.
Clik here to view.
Den Port 8080 des Hosts 10.0.0.5 auf den remote Port 80 des Hosts 10.0.0.23 weiterleiten:
Einfacher mit der Konfigurationsdatei /etc/ssh/ssh_config/ bzw. ~/.ssh/config:
HostName hostname # oder IP-Adresse
LocalForward [bind_address:]port host:hostport
User username
Beispiel:
HostName 10.0.0.5
LocalForward 8080 10.0.0.23:80
User emanuel
Verwendung
$ curl http://localhost:8080/ # Ruft Webseite von 10.0.0.23:80 ab
Remote Forwarding
Der Port port auf der remote Seite wird auf den Host host auf den Port hostport auf der lokalen Seite weitergeleitet. Auf der remote Seite ist danach der Port port auf der Adresse bind_address (default: 127.0.0.1) im Liste-Mode.
Syntax:
Beispiel: Hinter einer Firewall steht ein Webserver, auf den nicht zugegriffen werden kann. Es ist nur ein Zugriff auf ein SSH-Server möglich. Über Portforwarding kann man aber über den SSH-Server auf den Port 80 des Webservers zugreifen:
Image may be NSFW.
Clik here to view.
Den remote Port 80 des Hosts 10.0.0.23 über den SSH-Server 10.0.0.5 auf den lokalen Port 8080 weiterleiten:
Einfacher mit der Konfigurationsdatei /etc/ssh/ssh_config/ bzw. ~/.ssh/config:
HostName hostname # oder IP-Adresse
LocalForward [bind_address:]port host:hostport
User username
Beispiel:
HostName 10.0.0.5
RemoteForward 80 10.0.0.23::8080
User emanuel
Verwendung:
$ # Auf der Remote-Seite kann man jetzt auf den lokalen Webserver zugreifen
Sicherheitshinweis
Wird die bind_address nicht angegeben, lauscht der Socket auf die Adresse 0.0.0.0. Der Service wird somit von aussen erreichbar. Will man nur lokal auf den Port verbinden, gibt man als bind_address die lokale Adresse 127.0.0.1 an. Über eine spezifische IP-Adresse des Servers kann man den Port auch fix an eine Netzwerkkarte binden.
Hinweise
- Statt IP-Adresse können auch die Hostnamen verwendet werden.
- Um ein Socket auf einer Portnummer < 1024 zu eröffnen, muss man root sein.
Links und weitere Informationen
- Manpage zu ssh(1): http://www.openbsd.org/cgi-bin/man.cgi?query=ssh&sektion=1
- Manpage zu ssh_config(5): http://www.openbsd.org/cgi-bin/man.cgi?query=ssh_config&sektion=5