Beenden Sie alle SSH-Verbindungen mit einem Befehl und schließen Sie PuTTY

18

Gibt es eine Möglichkeit, alle SSH-Verbindungen zu beenden und PuTTY in "One Shot" zu schließen? Ich arbeite unter Windows 7 und verwende PuTTY, um verschiedene Linux-Hosts mit SSH zu verbinden.

Ein Beispiel für meine Arbeitsweise:

SSH to host1 with PuTTY...
banjer@host1:~> #...doin some work...ooh! need to go check something on host8...
banjer@host1:~> ssh host8
banjer@host8:~> #...doin some work...OK time for lunch. lets close putty...
banjer@host8:~> exit
banjer@host1:~> exit
Putty closes.

Wie kommt man von host8 zu PuTTY auf einmal? Manchmal finde ich mich bis zu 5 oder 10 Hosts tief. Mir ist klar, dass ich auf das X klicken kann, um das PuTTY-Fenster zu schließen, aber ich möchte mithilfe des Befehls exit sicherstellen, dass meine SSH-Verbindungen ordnungsgemäß geschlossen werden. Mir ist auch klar, dass ich nach Tipps frage, wie ich die Faulheit steigern kann. Ich schreibe es einfach als "wie kann ich effizienter sein".

Banjer
quelle
6
Nicht direkt, wonach Sie fragen, aber wie wäre es, wenn Sie einfach ctrl+dmehrmals drücken ?
Ulrich Dangel
@UlrichDangel Ich habe das noch nie benutzt, aber auch eine schnelle Möglichkeit, Verbindungen schnell zu beenden.
Banjer
2
Verschachteln Sie wirklich SSH-Sitzungen mit einer Tiefe von 5 bis 10 Ebenen? Ist Ihnen klar, dass ein verschlungener Tunnel entsteht, der alle Pakete in Ihrer SSH-Sitzung über alle diese Hosts abprallt? Könnten Sie das Problem lösen, indem Sie einfach keine ssh-Sitzungen verschachteln?
jw013
@ jw013 Nein, das habe ich nicht gemerkt, macht aber Sinn. Ehrlich gesagt, 5-10 Level waren eine Übertreibung, aber ich versuchte meine Frage zu veranschaulichen, "wie man Putty auf einen Schlag sauber verlässt".
Banjer

Antworten:

29

Versuchen Sie es mit der sshEscape-Sequenz für den Verbindungsabbau.

sshGeben Sie in der Sitzung ~.(Tilde-Punkt) ein. Sie werden die Zeichen nicht sehen, wenn Sie sie eingeben, aber die Sitzung wird sofort beendet.

$ ~.
$ Connection to me.myhost.com closed.  

Von man 1 ssh

The supported escapes (assuming the default ‘~’) are:
 ~.      Disconnect.
 ~^Z     Background ssh.
 ~#      List forwarded connections.
 ~&      Background ssh at logout when waiting for forwarded 
         connection / X11 sessions to terminate.
 ~?      Display a list of escape characters.
 ~B      Send a BREAK to the remote system (only useful for SSH protocol
         version 2 and if the peer supports it).
 ~C      Open command line.  Currently this allows the addition of port 
         forwardings using the -L, -R and -D options (see above). It also
         allows the cancellation of existing remote port-forwardings using 
         -KR[bind_address:]port.  !command allows the user to execute a 
         local command if the PermitLocalCommand option is enabled in
         ssh_config(5).  Basic help is available, using the -h option.
 ~R      Request rekeying of the connection (only useful for SSH protocol 
         version 2 and if the peer supports it).
George M
quelle
Ziemlich cool! Wie kann man ~.einen Alias ​​oder eine Funktion einfügen? Nur um es leicht zu merken, wie der Name exitall. Jetzt bitte ich um viel zu viel :). Ich habe ein paar Dinge ausprobiert, ~/.bashrcaber bekommen -bash: ~.: command not found. Ich nehme an, Bash sieht es als String und nicht als Escape-Sequenz, die direkt von der Tastatur kommt.
Banjer
Ich mag die ctrl+dLösung auch, aber dies beantwortet meine Frage direkter. Vielen Dank an alle.
Banjer
3
@ Banjer Bash sieht nie ~., es wird von sshselbst gehandhabt .
Gilles 'SO- hör auf böse zu sein'
@ Gilles gotcha, macht Sinn.
Banjer
Und es gibt keine Garantie, dass PuTTY dies auch tut. Der CLI- sshClient benötigt diese Technik, da es sich um eine CLI handelt. PuTTY ist eine GUI-Anwendung, und es gibt weitaus benutzerfreundlichere Möglichkeiten, dies auf einer GUI zu tun.
Alexios
11

Drücken CtrlDSie einfach und Sie werden dort abgemeldet, wenn Sie die Strg-Taste gedrückt halten und "d" drücken, bis das Fenster verschwindet.

Joe
quelle
1
Leider funktioniert dies nicht universell. Jede Sitzung, in der ein Editor oder ein anderes Vollbild-Tool ausgeführt wird, wird wahrscheinlich ignoriert EOT. Und sogar bashwird es in der Mitte einer Befehlszeile ignorieren. Probieren Sie es aus: Geben Sie einen einzelnen Buchstaben ein und versuchen Sie es Ctrl-D.
Alexios
Was bedeutet Strg + D, ich meine, ist es sicher vorhanden oder bricht den Prozess einfach ab?
AMB,
Es wird sicher beendet. Hierbei handelt es sich um eine Shell-Verknüpfung, die der Eingabe von "exit" und dem Drücken der Eingabetaste entspricht.
Joe
Eigentlich meine (Windows Git Bash & Ubuntu Bash) Problem ein logout.
Velis
ja, ich glaube, exit ruft auch logout auf, da ssh-verbindungen in der regel keine login-sitzungen sind.
Joe
9

Einfach PuTTY schließen. ( Alt+ F4standardmäßig IIRC.)

Gilles 'SO - hör auf böse zu sein'
quelle
2

Eine weitere Möglichkeit ist es, functionfür ssh:

   function ssh(){ /usr/bin/ssh $@ ; exit ; } 

Leider wird die Verbindung auch immer getrennt und die Abmeldung von der Konsole erfolgt, nachdem Sie die Arbeit am Remote-System beendet haben.

Beachten Sie, dass Sie diese Funktion auf allen Ihren Servern ausführen müssen, da sonst dieser Hack nicht funktioniert. Übrigens können Sie die Funktion immer in ~ / .bashrc oder ~ / .whatever_shell_you_use_rc einfügen.

Es sieht ein bisschen schmutzig aus im Vergleich zu Uther's Way.

eilen
quelle
functionist nicht POSIX - entfernen Sie einfach das Schlüsselwort und Sie müssen $@richtig zitieren , oder Ihre Argumente werden nach der Wortteilung (schlecht) übergeben.
Chris Down
2

Oder Sie können execIhren Shell-Prozess durch Folgendes ersetzen, sshwenn Sie zu einem anderen Host springen:

SSH to host1 with PuTTY...
banjer@host1:~> #...doin some work...ooh! need to go check something on host8...
banjer@host1:~> exec ssh host8
banjer@host8:~> #...doin some work...OK time for lunch. lets close putty...
banjer@host8:~> exit
Putty closes.

5 Ebenen tief ist nicht schön, da der Verkehr durch alle anderen Server passieren wird. Aus diesem Grund empfehle ich nicht, nur PuTTY oder ssh (~.) Zu töten, da dies (abhängig von Ihrer Vorgehensweise) zu verwaisten Prozessen auf den Servern führen kann.

Besser versuchen, weniger "faul" zu sein. Klicken Sie mit der rechten Maustaste auf die Titelleiste von puttys, um eine neue Sitzung schnell zu öffnen. Wenn Sie einen "Standard" -Server haben und 1 Sprung von diesem akzeptieren, ist die Funktion "Sitzung duplizieren" sehr nützlich. Besonders bei Verwendung der Pubkey-Authentifizierung.

MattBianco
quelle
2

Wenn es Ihnen nichts ausmacht, ein wenig zu schreiben, können Sie dies tun.

Skript: myssh.sh

#!/bin/bash
ssh $1
if [ $? -eq 5 ]; then
 exit 5
fi

Aufruf über den Punktbefehl:

$ . myssh [email protected]

Wenn Sie eine Ebene verlassen möchten:

$ exit

Wenn Sie alle beenden möchten:

$ exit 5
Monddieb
quelle
Natürlich müssten Sie es auf jeden Computer kopieren, von dem Sie jemals ssh haben. Wäre es nicht einfacher, eine Shell-Funktion namens ssh zu definieren? Das würde die vorhergehende Periode vermeiden, etc.
Ätherfisch
-1

Wenn Sie im Fenster des Putty-Terminals den Befehl logout eingeben, geschieht Folgendes für mich:

richard@forevermore:~ > logout

Schließt die ssh-Verbindung und beendet die Putty-Anwendung.

Richard
quelle
Ich glaube, dass Sie die Frage nicht richtig gelesen haben. OP macht ssh host1, und dann, von host1, macht ssh host8. An diesem Punkt logoutwürde a dasselbe tun wie der exitBefehl, den sie bereits kennen - aussteigen host8und wieder eingeben host1.
G-Man sagt, dass Monica
Ok, ich verstehe, mein schlechtes.
Richard