SSH-Tunnel HOWTO
Dieses HOWTO beschreibt, wie man einen ssh-Tunnel über einen Gateway zum Zielrechner aufbaut um zum Beispiel svn darüber laufen zu lassen. Das Verfahren wird manchmal auch "port forwarding" genannt.
Angenommen ein subversion-Repository war früher im Internet via https erreichbar, doch der Betreiber entschied sich dazu nur noch anfragen aus dem (entfernten) Netzwerk zuzulassen. Wenn man sich nicht bereits in diesem Netz befindet würde man sich üblicherweise per VPN ins entfernte Netz einfwählen und wie gewohnt weiterarbeiten. Möchte man allerdings nicht extra für einen Dienst ein VPN betreten, kann man diesen Dienst auch über ssh tunneln.
Tunnel aufbauen
Der Befehl
$ ssh -L lokalerport:zielrechner:zielport gatewaylogin@gateway
erzeugt nach erfolgreichem login auf dem Gateway einen Tunnel. Alle anfragen an port "lokalerport" auf dem lokalen Rechner, werden nun über den Gateway zum Zielrechner an den Zielport geleitet.
Am konkreten Beispiel leiten leiten wir alle lokalen Anfragen an den Port 7777 über den gateway (der zu dem wir ssh Zugang haben und der sich im selben Netz wie der svnserver befindet) an den https-Port des svnservers weiter:
$ ssh -L 7777:svnserver:443 user@gateway
Nun ist man auf dem Tunnel eingeloggt und der Tunnel besteht solange bis man sich wieder ausloggt.
Arbeitskopie anpassen
Da der svnserver jetzt nicht mehr über "https://svnserver/", sondern über "https://localhost:7777/" erreichbar ist, müssen bereits vorhandene Arbeitskopien natürlich angepasst werden. Dazu wechselt man ins Verzeichnis der Arbeitskopie und "schaltet" von der alten URL zur neuen um:
$ svn switch --relocate https://svnserver/pfad/zu/repo https://localhost:7777/pfad/zu/repo
Ein anschließendes
$ svn up
Sollte nach ein paar eventuellen Fragen über den "neuen" Host die Arbeitskopie aktualisieren.
SOCKS proxy
Eine Alternative ist der SOCKS proxy.
$ ssh -D 8080 gateway
Erzeugt einen SOCKS proxy der auf dem lokalen Port 8080 lauscht. Konfiguriert
man z.B. den Web Browser in den Proxy Einstellungen, den Proxy localhost:8080
zu benutzen, geht der komplette Browser Verkehr durch die SSH-Verbindung über
den gateway.