quitter toutes les connexions SSH en une seule commande et fermer PuTTY

19

Existe-t-il un moyen de se retirer de toutes les connexions SSH et de fermer PuTTY en "un coup"? Je travaille dans Windows 7 et j'utilise PuTTY to SSH sur divers hôtes Linux.

Un exemple de la façon dont je me retrouve à travailler:

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.

Par ci-dessus, est-il possible de passer de host8 à la fermeture de PuTTY en une seule fois? Parfois, je me retrouve jusqu'à 5 ou 10 hôtes en profondeur. Je me rends compte que je peux cliquer sur le X pour fermer la fenêtre PuTTY, mais j'aime m'assurer que mes connexions SSH se ferment correctement en utilisant la commande exit. Je me rends également compte que je demande des conseils pour augmenter la paresse. Je vais simplement l'écrire comme «comment puis-je être plus efficace».

Banjer
la source
6
Pas directement ce que vous demandez, mais que diriez-vous d'appuyer simplement ctrl+dplusieurs fois?
Ulrich Dangel
@UlrichDangel Je n'ai jamais utilisé cela auparavant, mais aussi un moyen rapide de se retirer rapidement des connexions.
Banjer
2
Êtes-vous vraiment en train d'imbriquer des sessions ssh de 5 à 10 niveaux de profondeur? Vous rendez-vous compte que cela crée un tunnel alambiqué qui fait rebondir tous les paquets de votre session ssh via tous ces hôtes? Pourriez-vous faire disparaître le problème en n'imbriquant tout simplement pas les sessions ssh?
jw013
@ jw013 Non, je ne m'en rendais pas compte, mais c'est logique. Honnêtement, 5-10 niveaux était une exagération, mais j'essayais d'illustrer ma question de "comment sortir proprement de Putty d'un seul coup."
Banjer

Réponses:

29

Essayez d'utiliser la sshséquence d'échappement de fin de connexion.

Dans la sshsession, entrez ~.(point tilde). Vous ne verrez pas les caractères lorsque vous les tapez, mais la session se terminera immédiatement.

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

De 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
la source
Plutôt cool! Une façon de mettre ~.dans un alias ou une fonction? Juste pour lui donner un nom facile à retenir exitall. Maintenant, je demande beaucoup trop :). J'ai essayé quelques trucs ~/.bashrcmais j'arrive -bash: ~.: command not found. Je suppose que bash le voit comme une chaîne et non comme une séquence d'échappement provenant directement du clavier.
Banjer
J'aime aussi la ctrl+dsolution, mais cela répond plus directement à ma question. Merci a tous.
Banjer
3
@Banjer bash ne voit jamais ~., il est géré par sshlui-même.
Gilles 'SO- arrête d'être méchant'
@Gilles gotcha, est logique.
Banjer
Et rien ne garantit que PuTTY le fasse également. Le sshclient CLI a besoin de cette technique car il s'agit de CLI. PuTTY est une application graphique et il existe des moyens beaucoup plus conviviaux de faire ce genre de choses sur une interface graphique.
Alexios
12

Appuyez simplement sur CtrlDet il vous déconnectera pour maintenir Ctrl et appuyez sur "d" jusqu'à ce que la fenêtre disparaisse.

Joe
la source
1
Malheureusement, cela ne fonctionne pas universellement. Toute session exécutant un éditeur ou un autre outil plein écran est susceptible d'ignorer EOT. Et même bashl'ignorera au milieu d'une ligne de commande. Essayez-le vous-même: tapez une seule lettre et essayez Ctrl-D.
Alexios
Que fait Ctrl + D, je veux dire, est-ce qu'il existe en toute sécurité ou tue simplement le processus?
AMB
Il sort en toute sécurité. Il s'agit d'un raccourci shell qui revient à taper «exit» et à appuyer sur Entrée.
Joe
En fait, mon problème (windows git bash & ubuntu bash) a logout.
velis
oui, je crois que exit appelle également la déconnexion car les connexions ssh ne sont généralement pas des sessions de connexion.
Joe
9

Fermez simplement PuTTY. ( Alt+ F4par défaut IIRC.)

Gilles 'SO- arrête d'être méchant'
la source
2

Une autre façon est de faire functionpour ssh:

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

Malheureusement, il fermera également toujours la connexion et la déconnexion de la console une fois que vous aurez terminé de travailler sur le système distant.

Notez que vous devez faire une telle fonction sur tous vos serveurs, sinon ce hack ne fonctionnera pas. Btw vous pouvez toujours mettre la fonction dans ~ / .bashrc ou ~ / .wwhat_shell_you_use_rc.

Cela ressemble un peu à un hack sale par rapport à la façon dont uther.

se ruer
la source
functionn'est pas POSIX - supprimez simplement le mot-clé, et vous devez citer $@correctement, ou vos arguments seront passés après le fractionnement du mot (mauvais).
Chris Down
2

Ou vous pouvez utiliser execpour remplacer votre processus shell sshlors du saut vers un autre hôte:

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 niveaux de profondeur n'est pas joli, car le trafic passera par tous les autres serveurs. Pour cette raison, je ne recommande pas de simplement tuer PuTTY ou ssh (~.), Car (selon ce que vous faites), cela pourrait entraîner des processus orphelins sur les serveurs.

Mieux vaut essayer d'être moins "paresseux". Un clic droit sur la barre de titre de puttys permet d'ouvrir rapidement une nouvelle session. Si vous avez un serveur "par défaut" et acceptez 1 saut depuis celui-ci, la fonction "Duplicate Session" est très utile. Surtout lors de l'utilisation de l'authentification pubkey.

MattBianco
la source
2

Si cela ne vous dérange pas de faire un peu de script, vous pouvez le faire.

Script: myssh.sh

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

Appelez via la commande dot:

$ . myssh [email protected]

Si vous souhaitez quitter un niveau:

$ exit

Si vous souhaitez tout quitter:

$ exit 5
Moonthief
la source
Bien sûr, vous devriez le copier sur chaque ordinateur à partir duquel vous pouvez utiliser ssh. De plus, ne serait-il pas plus facile de simplement définir une fonction shell appelée ssh? Cela éviterait la période précédente, etc.
etherfish
-1

La déconnexion dans la fenêtre du terminal de mastic le fait pour moi:

richard@forevermore:~ > logout

Ferme la connexion ssh et quitte l'application Putty.

Richard
la source
Je pense que vous n'avez pas lu correctement la question. OP le fait ssh host1, puis, à partir de host1, le fait ssh host8. À ce stade, a logoutferait la même chose que la exitcommande qu'ils connaissent déjà - sortir host8et les replacer host1.
G-Man dit `` Réintègre Monica ''
D'accord, je vois, ma mauvaise.
Richard