Einführung
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:
ssh -L [bind_address:]port:host:hostport username@hostname
Beispiel: Der SSH-Client stellt den Port 80
des HTTP-Servers auf dem
SSH-Server auf Port 8080
bereit:
Den Port 8080
des Hosts 10.0.0.5
auf den remote Port 80
des Hosts 10.0.0.23
weiterleiten:
ssh -L 8080:10.0.0.23:80 emanuel@10.0.0.5
Einfacher mit der Konfigurationsdatei /etc/ssh/ssh_config/
bzw.
~/.ssh/config
:
Host hostname
HostName hostname # oder IP-Adresse
LocalForward [bind_address:]port host:hostport
User username
Beispiel:
Host serve_http
HostName 10.0.0.5
LocalForward 8080 10.0.0.23:80
User emanuel
Verwendung:
$ ssh serve_http
$ 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:
ssh -R [bind_address:] port:host:hostport username@hostname
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:
Den remote Port 80
des Hosts 10.0.0.23
über den SSH-Server 10.0.0.5
auf
den lokalen Port 8080
weiterleiten:
ssh -R 80:10.0.0.23:8080 emanuel@10.0.0.5
Einfacher mit der Konfigurationsdatei /etc/ssh/ssh_config/
bzw.
~/.ssh/config
:
Host hostname
HostName hostname # oder IP-Adresse
LocalForward [bind_address:]port host:hostport
User username
Beispiel:
Host remote_http
HostName 10.0.0.5
RemoteForward 80 10.0.0.23::8080
User emanuel
Verwendung:
$ ssh remote_http
$ # 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