Wie kann man Befehle an die "innere" SSH-Sitzung senden?

32

Stellen Sie sich ein Szenario vor, in dem ich von meinem lokalen Computer aus auf einem Server (den wir "Wallace" nennen) und von dort sshauf einem anderen Server (den wir "Gromit" nennen) angemeldet bin :

laptop ---ssh---> Wallace ---ssh---> Gromit

Dann hängt die SSH-Sitzung von Wallace bis Gromit, und ich möchte sie töten. Wenn ich ~.zum Beenden von ssh eintrete , wird die ssh-Sitzung von meinem Laptop an Wallace beendet, da das ~von dieser ssh-Sitzung abgefangen wird und das .als Befehl zum Beenden der Sitzung interpretiert wird. Wie sende ich einen Befehl an die SSH-Sitzung zwischen Wallace und Gromit? Wie töte ich mein "inneres" ssh?

Bilderstürmer
quelle
Zu Ihrer Information: Bei einigen Tastaturlayouts muss die Taste '~' möglicherweise zweimal gedrückt werden, um ein '~' Zeichen zu drucken. Ich benutze oft screen, damit ich bei einem Verlust der ssh-Verbindung einfach eine andere Shell starten kann, die diese Sitzung beendet.
Mathe

Antworten:

42

Fügen Sie eine weitere Tilde hinzu (z. B. Typ ~~.). Jede nachfolgende Tilde wird von der äußersten SSH-Sitzung gegessen, die noch keine gegessen hat. Handelt es sich bei dem nächsten Zeichen jedoch um eine andere Tilde, wird sie an die nächste Sitzung in weitergeleitet.

Wenn Sie von gromit 1 zu einem dritten Host wechseln (nennen wir es wensleydale), wird ~~~.die Sitzung zu wensleydale abgebrochen und Sie kehren zu einer Eingabeaufforderung für gromit zurück.

1 Und was ist das für ein großartiger Server? Wie oft habe ich eine Entwickler-Bemerkung "Cracking Host, Gromit" gehört?

MadHatter unterstützt Monica
quelle
2
Siehe auch
1
Oh, das ist wunderbar. Ich kann nicht glauben, dass ich noch nie darauf gestoßen bin.
MadHatter unterstützt Monica
Es wäre großartig, wenn es eine Möglichkeit gäbe, visuelles Feedback darüber zu erhalten, wie weit unten Sie sind, falls Sie laptop --> Wallace --> Gromit --> Shaun --> Timmyetwas Verrücktes haben oder so ...
iconoclast
-2

Sie können beliebige Befehle eingeben und die Ausgabe der innersten Shell in einer Variablen abfangen

export output=`echo some_cmd | ssh user@host |  echo some_cmd2 | ssh user2@host2`
Thomas Wadley
quelle
1
Das ist sehr interessant, aber ich bin mir nicht sicher, wie es mit der Frage zusammenhängt. Können Sie erklären?
Iconoclast