Wie verkettet man SSH-Befehle über mehrere Hops?

Wie verkettet man SSH-Befehle über mehrere Hops?

Ist es möglich, mehrere SSH-Verbindungen miteinander zu verketten, wobei jede Verbindung als SSH-Host angegeben wird?

-WIch weiß, dass es möglich ist, das Flag zu verwenden oder nceinen 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. ncZweitens 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/configum den Zielhost zu definieren (z. B. hopped_destination), sodass SSH zuerst eine Verbindung zum Zwischenhost herstellt und dann ssh destinationvon dort aus vorgeht. So kann ich einfach ssh hopped_destinationvon der ersten Maschine aus vorgehen und der Zwischenhost ~/.ssh/configkü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 ssheinzugeben :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 ProxyCommandich 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)

verwandte Informationen