Ist es möglich, mehrere SSH-Verbindungen miteinander zu verketten, wobei jede Verbindung als SSH-Host angegeben wird?
-W
Ich weiß, dass es möglich ist, das Flag zu verwenden oder nc
einen zweiten Hop zu einem anderen Hostnamen oder einer anderen IP-Adresse durchzuführen (siehe z. B.SSH über mehrere Hosts). Ich habe es aus mehreren Gründen nicht geschafft, dies so zum Laufen zu bringen, wie ich es wollte. Erstens möchte ich für den zweiten Hop eine Schlüsseldatei verwenden, die auf dem Zwischenhost gespeichert ist, und ich sehe keine Möglichkeit, dies mit oder anzugeben -W
. nc
Zweitens hat das endgültige Ziel eine variable IP-Adresse. Um damit umzugehen, lasse ich auf dem Ziel ein Skript laufen, das dessen IP-Adresse in eine auf dem Zwischenhost gespeicherte Datei schreibt, und dann ein Skript ( look_up_ip.sh
) auf dem Zwischenhost, das diese IP-Adresse ausgibt. Auf dem Zwischenhost habe ich diesen Eintrag in ~/.ssh/config
:
Host destination
HostName destination
User dest_user
IdentityFile ~/.ssh/destination
PreferredAuthentications publickey
ProxyCommand nc $(look_up_ip.sh %h) %p
Dadurch kann ich vom Zwischenserver mit nur eine Verbindung zum Ziel herstellen ssh destination
.
Ich möchte etwas auf der ersten Maschine einfügen, ~/.ssh/config
um den Zielhost zu definieren (z. B. hopped_destination
), sodass SSH zuerst eine Verbindung zum Zwischenhost herstellt und dann ssh destination
von dort aus vorgeht. So kann ich einfach ssh hopped_destination
von der ersten Maschine aus vorgehen und der Zwischenhost ~/.ssh/config
kümmert sich um die Identitätsdatei und die IP-Suche für das Ziel. Ein Grund, warum ich das möchte, ist, dass ich letztendlich in der Lage sein möchte, mich mit VNC über mit dem Ziel zu verbinden vncviewer -via destination localhost:0
, und ich möchte, dass die Verbindung für andere Benutzer auf dem Zwischenhost nicht zugänglich ist (wie in Teilen der akzeptierten Antwort auf diese Frage angedeutet:https://superuser.com/questions/96489/an-ssh-tunnel-via-multiple-hops). Ich hatte gehofft, dass es möglich wäre, auf der ersten Maschine etwas wie Folgendes ssh
einzugeben :ProxyCommand
Host destination
ProxyCommand ssh -t intermediate_user@intermediate_host ssh destination
aber ich habe keine Optionen gefunden, mit denen so etwas funktioniert.
Ich würde mich auch über Vorschläge zu besseren Möglichkeiten freuen (gibt es eine Möglichkeit, das loszuwerden, was nc
ProxyCommand
ich jetzt verwende?). Ich könnte wahrscheinlich ein Skript ausarbeiten, um den VNC-Befehl direkter auszuführen, aber das könnte komplizierter sein (die Portweiterleitung direkt handhaben und sicherstellen, dass die Dinge beim Beenden geschlossen werden und dass kein Port für alle Benutzer geöffnet wird).
Antwort1
Beispiel aus meiner SSH-Konfigurationsdatei;
Host vmike2-squid-cache
User mike
ProxyCommand ssh -q -A -x ???.???.???.??? -W %h:22
(das einzige, was ich geändert habe, war die IP)