Comment puis-je sortir de ssh quand il se verrouille?

340

Je ssh souvent dans ma boîte à la maison de l'école, mais généralement quand je change de classe et que mon ordinateur est suspendu, le tuyau sera cassé. Cependant, ssh se bloque simplement - Ctrl + c , Ctrl + z et Ctrl + d n'a aucun effet.

C'est ennuyeux de devoir redémarrer mon terminal, et encore plus ennuyeux de devoir fermer et recréer une nouvelle fenêtre d'écran.

Donc, ma question est-elle un moyen facile de faire en sorte que ssh meure correctement (c’est-à-dire que lorsque le tuyau échoue "normalement", il sortira avec un message concernant un tuyau cassé)? Ou dois-je déterminer ce qu'est le PID et le tuer manuellement?

    
posée Wayne Werner 11.03.2011 - 17:22
la source

3 réponses

472

Les clés normales sont transférées sur la session ssh , donc aucune ne fonctionnera. Au lieu de cela, utilisez les séquences d'échappement. Pour tuer la session en cours, appuyez sur Entrez ↵ , ~ , . .

Plus de ces séquences d'échappement peuvent être listées avec Enter ↵ , ~ , ? :

Supported escape sequences:
  ~.  - terminate session
  ~B  - send a BREAK to the remote system
  ~R  - Request rekey (SSH protocol 2 only)
  ~#  - list forwarded connections
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

Vous pouvez fermer la liste des séquences d'échappement en appuyant sur enter .

Notez que si vous appuyez sur ~ ~ , ssh envoie le ~ au lieu de l'intercepter, vous pouvez adresser N imbriqué ssh connexions en appuyant sur ~ N fois. (Ceci s'applique uniquement aux ~ s qui suivent directement un enter .) Cela signifie que entrez ~ < kbd> ~ ~ ~ ~ . termine une session de ssh 5 couches et conserve les 4 autres intacts.

    
réponse donnée geekosaur 11.03.2011 - 18:18
la source
51

Vous souhaiterez peut-être également configurer Keep-Alives pour SSH au niveau de l’application pour empêcher le gel des problèmes de connexion. Mon ~/.ssh/config contient ceci:

Host *
ServerAliveInterval 15
# ServerAliveCountMax 3

Cela fait que le client ssh envoie au niveau application toutes les 15 secondes. Lorsque trois d'entre eux échouent consécutivement (la valeur par défaut de ServerAliveCountMax ), le client considère que la connexion est bloquée et la ferme.

Contrairement à l’autre option TCPKeepAlive , cette option est cochée dans le canal crypté et n’est pas falsifiable.

Il est à noter que ces fonctions permettent également de maintenir les connexions inactive , c’est-à-dire de ne pas avoir à moitié fermé les sessions tcp suspendues pendant des heures intactes.

Je vous recommande fortement d'activer cette fonctionnalité si vous la rencontrez régulièrement, mais vous devez également connaître le faible risque de sécurité qu'elle peut entraîner. Une attaque en texte clair connue peut devenir plus facile si l'attaquant connaît l'intervalle et le contenu d'une connexion inactive. Cela peut être la raison pour laquelle il n'est pas activé par défaut.

    
réponse donnée ulidtko 11.03.2011 - 19:51
la source
39

Comme indiqué dans la réponse de geekosaur, la séquence d'échappement ~. mettra fin à la connexion.

La liste complète des séquences d'échappement et ce qu'elles font peuvent être affichées en tapant ~? :

Supported escape sequences:
  ~.  - terminate connection (and any multiplexed sessions)
  ~B  - send a BREAK to the remote system
  ~C  - open a command line
  ~R  - Request rekey (SSH protocol 2 only)
  ~^Z - suspend ssh
  ~#  - list forwarded connections
  ~&  - background ssh (when waiting for connections to terminate)
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)
    
réponse donnée scottl 15.03.2011 - 07:39
la source

Lire d'autres questions sur les étiquettes