SSH über mehrere Hosts

37

Um zu meiner Maschine in meinem Büro zu gelangen, mache ich im Moment Folgendes:

me@home:~$ ssh unix.university.com
me@unix:~$ ssh unix.department.univeristy.com
[email protected]:~$ ssh office-machine.department.university.com
me@office-machine:~$ echo "This is very annoying"

Gibt es eine einfache Möglichkeit, diesen Prozess zu automatisieren, vielleicht einen einzelnen Befehl, den ich an meinem Ende verwenden kann?

Lucas
quelle

Antworten:

31

Sie können den ssh-Client verwenden, um ssh beim Anmelden auf dem Remotecomputer auszuführen.

ssh -t unix.university.com \
    ssh -t unix.department.univeristy.com \
    ssh -t office-machine.department.university.com

(Der Grund, warum ich -tin die Aufrufe einbeziehe, ist, dass ssh mir Fehler gab, da es kein Terminal war, als ich es auf meinem eigenen Computer ausprobierte. Ihr Computer ist möglicherweise anders.)

Wenn Sie die letzte Shell verlassen, wird der Prozess mit einer Kette beendet, sodass Sie nicht mehrmals Ctrl-Dtippen müssen.

Amphetamachine
quelle
Bitte beachten Sie: Fügen Sie "-t" nur hinzu, wenn Sie sich nur auf dem Remote-Computer anmelden. Um einen Befehl auf der entfernten Maschine zu starten, setzen Sie diese NICHT so ein, wie sie einige Dinge tar cf - something | ssh somewhere "cd /path/remote ; tar xf - " beschädigen können / werden (zum Beispiel :: könnte beschädigt werden, wenn Sie sie hinzufügen -t! Sehen Sie sich zum Beispiel die wunderbare Antwort von StephaneChazelas an unix.stackexchange.com/questions/151916/ … )
Olivier Dulac
3
Die Verwendung von -J ist sicherer als diese Antwort, da Sie dann die Möglichkeit haben, alle SSH-Schlüssel auf Ihrem lokalen Computer zu speichern. Die Option -J wurde in der Version 7.3 von openssh eingeführt, wie in der Antwort von @Miikka
Erik Sjölund vom
1
@ ErikSjölund Openssh lässt nicht mehr als eine -JOption zu. Ich denke, Sie könnten es mit mehreren ProxyCommandOptionen in Ihrer Konfiguration tun .
Amphetamachine
1
@amphetamachine Mit können -JSie eine durch Kommas getrennte Liste von Hops angeben, die durchlaufen werden sollen. Die Verwendung von ProxyCommandwith -Wist jedoch immer noch ein viel besserer Ansatz als diese Antwort, wenn Sie eine Version verwenden, die zu alt für die Unterstützung ist -J.
Kasperd
35

Ja, es gibt eine großartige Möglichkeit, dies mit ssh ProxyCommand und netcat zu tun

Fügen Sie so etwas in Ihre .ssh / config ein

Host *.department.university.com
User me
ForwardAgent yes
ProxyCommand ssh unix.university.com nc %h %p

Dies meldet sich direkt auf einem .department.university.com-Server mit dem Jump / Bastion-Host unix.university.com an. Möglicherweise benötigen Sie auch eine Zeilengruppe für unix.university.com direkt.

Hier ist ein Link, der erklärt, wie es funktioniert: http://backdrift.org/transparent-proxy-with-ssh

Mit dieser Technik können Sie jetzt einfach schreiben

ssh unix.department.university.com

und es wird alles direkt erscheinen. Tools wie rsync, scp usw. (alles im ssh-Stack) funktionieren ebenfalls transparent.

Aaron Brown
quelle
2
+1 Ich verwende etwas Ähnliches, um Daten von einem Testnetzwerk über einen Staging-Server auf ein Prod-Netzwerk zu übertragen.
Arcege
2
Ja, das funktioniert großartig!
gabe.
15
Nur für den Rekord, dass neuere Versionen von ssh die -WOption unterstützen, können Sie so etwas tun, ProxyCommand ssh -W %h:%p gatewayanstatt abhängig von nc
Ulrich Dangel
Gut zu wissen! Thx
Aaron Brown
2
Funktioniert hervorragend, wenn der Name des Benutzers auf allen Computern gleich ist. wenn es anders ist, muss man so etwas tunProxyCommand ssh -W %h:%p user@gateway
Riccardo Cossu
9

In OpenSSH 7.3 fügte ssh das -JBefehlszeilen-Flag und die entsprechende ProxyJumpKonfigurationsoption hinzu, um genau dieses Problem zu lösen.

Geben Sie die Hosts, durch die Sie sshen möchten, als durch Kommas getrennte Liste an -J. Beispielsweise:

ssh -J unix.university.com,unix.department.university.com  \
  office-machine.department.university.com
Miikka
quelle
-5

SSH-Tunneling. Ich erinnere mich nicht genau, wie das geht, aber ich weiß, dass es eine Möglichkeit gibt, einen Tunnel von einer Maschine zuzulassen, indem sie sich vielleicht an einen separaten Port anschließt. Auf diese Weise wird nur derselbe ursprüngliche Computer (beispielsweise mit einem anderen Port) als Shell verwendet, und Sie werden an Ihren endgültigen Standort gebracht.

Müsste allerdings nachschlagen, wie man es konfiguriert.

:)

Anthony Hurst
quelle
Sie wollen (und können wahrscheinlich auch nicht) einen Hafen oder Ihr Universitätstor öffnen ...
Stéphane Gimenez
9
Wenn Sie nicht wissen, wie es geht, und sich nicht die Mühe machen können, es nachzuschlagen, warum haben Sie diese Antwort veröffentlicht?
Amphetamachine
4
Keine wirkliche Antwort
gabe.