Portforwarding mit SSH

Aus Sicherheitsgründen haben wir den Zugang per SSH zu allen Servern per Firewall, für alle Zugriffe die nicht aus dem internen Netzwerk erfolgen gesperrt. Um den Zugriff von zum Beispiel zu Hause trotzdem zu erlauben, gibt es einen Server der einen Zugriff von außen erlaubt. Wenn man auf diesem Server eingeloggt ist kann man sich dann weiter zu anderen Servern verbinden, da dieser Server ja im internen Netzwerk ist, und damit nicht von der Firewall blockiert wird.
Hier muss man sich jedoch für jede Verbindung zweimal hintereinander einloggen und auch beispielsweise ein Übertragen mit rsync zu einem internen Server ist nicht direkt möglich.
Umgehen kann man das indem man einen lokalen Port über den extern zugänglichen Server zu dem internen Server weiterleitet. Folgender Befehl leitet den lokalen Port 2020 über den server admin.tao.invalid an den Port 22 des Servers web1.tao.invalid weiter. Dabei erfolgt die Verbindung zum admin.tao.invalid per SSH über den Port 7010 und den Benutzer user.

$ ssh -fN -l user -L 2020:web1.tao.invalid:22 admin.tao.invalid -p 7010

Jetzt können wir uns also mit

$ ssh web@localhost -p 2020

am Server web1.tao.invalid anmelden oder auch Daten mit rsync kopieren in dem wir als Ziel localhost:2020 angeben.

Um mir die Arbeit zu erleichtern bin ich aber noch einen Schritt weiter gegangen und hab meiner SSH Konfigurationsdatei einen Eintrag für den internen Server hinzugefügt:

~/.ssh/config
Host web1.tao.invalid
  HostName localhost
  Port 2020

Durch diesen Eintrag brauch ich mich nicht über localhost und einen speziellen Port anmelden sondern kann mich ganz normal mit

$ ssh web@web1.tao.invalid

einloggen.

Auch rsync und andere Programm können somit ohne die Angabe eines speziellen Ports leicht verwendet werden.

Zusätzlich hab ich mir noch einen Bash-Alias angelegt, der mir auch noch das Weiterleiten des Ports erleichtert:
alias port-forward-web1='ssh -fN -l user -L 2020:web1.tao.invalid:22 admin.tao.invalid -p 7010'