Ssh multi hopping ist das Weiterspringen von Server zu Server via ssh. Transparent bedeutet in dem Fall, dass wir nicht selbst weiterspringen müssen, sondern dass es automatisch funktioniert. Dadurch können wir nicht nur per ssh durch mehrere server hindurch connecten, sondern wir können auch einfach tunnel erstellen oder Dateien per scp auf den server verschieben.

Weil man natürlich keine Lust hat für jeden Server ein Passwort einzutippen sollte einen SSH Schlüssel benutzen. Um seinen privaten Schlüssel nicht auf allen Servern ablegen zu müssen möchte man den Schlüssel automatisch von Server zu Server weitergeben lassen.

tldr

Quick’n’Dirty: einfach die Befehle konkatenieren:

ssh -A -t jump-server ssh -A -t server
-A
Schlüssel weiter reichen
-t
Öffnet ein pseudo Terminal (ohne bekommt man keine Terminal am Ende des Tunnels)

ssh config

Sinnvoller und einfacher zu bedienen es, wenn man alles ordentlich konfiguriert. Das ermöglicht dann auch einen transparenten, direkten Zugriff auf den Zielserver

Host jump
    ForwardAgent yes

Host server
    ForwardAgent yes
    ProxyCommand ssh jump -W %h:%p
ForwardAgent
Weiterleitung des Schlüssels für diesen Host
ProxyCommand
Befehl der vor dem Verbindungsaufbau ausgeführt wird in dem Fall: -W %h:%p
-W %h:%p
Leitet Input und Output über die SSH Verbindung weiter (%h = host, %p = port)

ssh config - multi hop

Jetzt haben wir eigentlich alles zusammen. In der ssh config lassen sich so auch mehrere Server aufreihen. Dabei gibt es allerdings eine Stolperfalle, denn das multihopping braucht man um auf einen internen Server zu kommen, interne Server erhalten allerding selten eine Domain.

Host jumpOuter
    ForwardAgent yes
    IdentityFile ~/.ssh/id_rsa

Host jumpInner
    ForwardAgent yes
    ProxyCommand ssh jumpOuter -W %h:%p

Host server
    HostName 192.168.0.10
    ForwardAgent yes
    ProxyCommand ssh jumpInner -W %h:%p
HostName
Definiert eine IP oder einen HostName für den Host (hier die IP des internen Servers)

Jetzt jetzt können wir auf unseren internen Server zugreifen. Dank der Konfiguration reicht ein einfaches:

ssh server

Zusätzlich können wir genauso scp oder rsync benutzen oder einen Tunnel aufbauen.