Ich habe Probleme beim Tunneln durch einen SSH1-Server. Dies ist auf der Maschine eines Kunden und nein, sie werden nicht auf SSH2 aktualisieren.
Ein bisschen Hintergrund: Ich kann erfolgreich durch das Gateway des Kunden tunneln
localhost -> gateway.customer.example.com -> srv.customer.internal
mit dieser Konfiguration
Host gateway
Hostname gateway.customer.example.com
IdentityFile ~/.ssh/mykey
...
Host srv-tunnel
ProxyCommand ssh gateway -W srv.customer.internal:22
IdentityFile ~/.ssh/mykey
...
und dann einfach
$ ssh srv-tunnel
Das funktioniert hervorragend und richtet den Tunnel mithilfe der Schlüsseldatei automatisch ein ~/.ssh/mykey
.
Ich habe versucht, eine ähnliche Konfiguration für diesen Multi-Hop-Tunnel zu verwenden:
localhost -> gateway.customer.example.com
|
v
onemoregateway.customer.internal -> srv2.customer.internal
aber dieses Mal dieonemoregateway
läuft ssh 1 und hat nicht nc
verfügbar. Ich kann eine SSH-Verbindung herstellen onemoregateway
und die Eingabeaufforderung zeigt mir an, dass The only permitted commands are ssh and scp.
SSH mit einem Fehler beendet wird, wenn ich versuche, wie oben beschrieben eine Weiterleitungsverbindung einzurichten stdio forwarding require Protocol 2
.
Ich kann jedoch nicht direkt von onemoregateway
nach sshen srv2
, da sich der private Schlüssel nur auf meinem lokalen Rechner befindet. Um die Sache noch komplizierter zu machen, brauche ich einen Schlüssel für gateway
und einen weiteren Schlüssel für onemoregateway
und srv2
.
Also, wie kann ich durchtunneln srv2
?
Ich denke, dass es irgendwie möglich sein muss, da meine Kollegen es mit Putty+Pageant unter Windows gemacht haben, aber ich bin unter Linux
Antwort1
Ok, ich habe eine Möglichkeit gefunden, dies zu tun, aber es scheint keine Möglichkeit zu geben, das Tunneln transparent zu machen.
Host gateway
Hostname gateway.customer.example.com
IdentityFile ~/.ssh/mykey
...
Host tunnel-to-srv2
ProxyCommand ssh gateway -W onemoregateway.customer.internal
IdentityFile ~/.ssh/myotherkey
Protocol 1
LocalForward 10022 srv2.customer.internal:22
...
Host srv2
Hostname localhost
Port 10022
IdentityFile ~/.ssh/myotherkey
Protocol 1
...
Und jetzt muss ich
$ ssh tunnel-to-srv2
und schließlich in einem separaten Terminal*
$ ssh srv2
* Ich kann keinen Weg finden, den Tunneling-SSH-Prozess in den Hintergrund zu versetzen, nicht einmal mit-fNT
Edit: es stellt sich heraus, dass es das onemoregateway
tatsächlich gibt nc
und ich es ausführen kann, aber ich muss den vollständigen Pfad verwenden/bin/nc
Also, schließlich habe ich diese Konfiguration
Host gateway
Hostname gateway.customer.example.com
IdentityFile ~/.ssh/mykey
...
Host tunnel-to-srv2
ProxyCommand ssh gateway -W onemoregateway.customer.internal
IdentityFile ~/.ssh/myotherkey
Protocol 1
...
Host srv2
ProxyCommand ssh tunnel-to-srv2 /bin/nc srv2.customer.internal 22
IdentityFile ~/.ssh/myotherkey
Protocol 1
...
und ich bekomme transparentes Tunnelhopping, indem ich einfach laufe
$ ssh srv2