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.