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


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 bloque simplement - Ctrl+c, Ctrl+z et Ctrl+ n'a aucun effet.

C'est embêtant 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? Ou dois-je déterminer le PID et le tuer manuellement?


343
2018-03-11 16:22


origine


Si je suis déconnecté d'une session SSH active, il se fige. Je viens de le tuer et de commencer une nouvelle session. Aucune information n'est perdue car j'utilise l'écran GNU. - Lekensteyn
Moi aussi - l'écran est le meilleur. Mais c'est toujours ennuyeux de devoir screen -x : P - Wayne Werner
[mosh] (mosh.mit.edu) est une alternative intéressante pour éviter ce problème. Il "reste connecté" même avec une connectivité Internet intermittente. - jaynp
@jaynp L'inconvénient de mon utilisation de mosh (depuis deux minutes) est que je ne sais pas comment le déconnecter. J'utilise une session tmux + irssi sur un hôte distant (en tant que videur IRC, en quelque sorte) et je veux parfois me déconnecter (tout en maintenant le tmux + irssi en cours d'exécution) et ce avec <enter> + ~ +. en utilisant SSH mais ne fonctionnera pas en utilisant mosh. - Pavel Šimerda


Réponses:


Les touches normales sont transférées sur le ssh session, donc personne ne fonctionnera. Au lieu de cela, utilisez les séquences d'échappement. Pour tuer la session en cours atteinte ultérieurement Entrez ↵, ~, ..

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

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 entrer.

Notez que parce que frapper ~~ causes ssh envoyer le ~ au lieu de l'intercepter, vous pouvez adresser N imbriqué ssh connexions en frappant ~  N fois. (Cela ne concerne que ~s qui suivent directement un entrer.) C'est-à-dire que entrer~~~~~. termine un ssh session 5 couches de profondeur et garde les 4 autres intacts.


478
2018-03-11 17:18



Pour les dispositions de clavier où ~ est un clé morte, la séquence de touches est Enter  ~  Space  .. - Søren Løvborg
J'ai ajoutée plus de séquences d'échappement qui pourraient être utiles. :) - gertvdijk
Notez que vous devez décommenter la ligne EscapeChar ~ dans /etc/ssh/ssh_config (ou ~/.ssh/ssh_config si tu préfères). - Aditya M P
@Hitechcomputergeek Enter  ~  ~  . Depuis ~  ~ envoie un littéral ~ à travers votre session SSH, la seconde session SSH le recevra sous la forme d’un seul tilde et interprétera le . dans le cadre de l'évasion. Pour envoyer à la 5ème session ssh imbriquée, utilisez simplement 5 tildes dans votre séquence d'échappement. - Score_Under
changement de vie ;) - artm


Vous pouvez également vouloir configurer le niveau de l'application garder la vie pour SSH à prévenir il de geler sur les problèmes de connexion. ma ~/.ssh/config contient ceci:

Host *
ServerAliveInterval 15
# ServerAliveCountMax 3

Cela fait en sorte que le client ssh envoie des données au niveau de l'application toutes les 15 secondes. Chaque fois que trois d’entre eux échouent consécutivement (par défaut ServerAliveCountMax), le client considère que la connexion est bloquée et la ferme.

Opposé à l'autre option TCPKeepAlive, cela est vérifié dans le canal crypté et n'est pas spoofable.


Il est à noter que ces survivants aident également à garder au ralenti connexions vivantes, c’est-à-dire vous empêcher d’avoir mi-clos Tcp sessions suspendues pendant des heures intactes.

Je vous recommande vivement 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 connu peut devenir plus facile si l'attaquant connaît l'intervalle et le contenu d'une connexion inactive. Cela pourrait être la raison pour laquelle il n'est pas activé par défaut.


51
2018-03-11 18:51



Raisons de sécurité. Vous pourriez aller boire et laisser ssh sessio ouvert et votre partenaire de laboratoire avec lequel vous avez travaillé au cours des 20 dernières années pourrait utiliser votre session pour détourner le serveur et le détruire ... pendant que vous buviez pendant votre pause de 10 minutes. - Luis Alvarado♦
@CYREX, hein? Et comment l'option désactivée par défaut peut-elle vous empêcher d'avoir des partenaires de laboratoire injustes? %) - ulidtko
@ulidtko: Y a-t-il une raison pour ne pas définir ServerAliveInterval à 1 pour qu'une connexion perdue soit détectée immédiatement? - krlmlr
J'ai amélioré le poste avec ma connaissance à ce sujet avec d'autres «correctifs». Je pense que ce n'est pas la répondez à la question car il s'agit plutôt de prévenir plutôt que de réparer un problème déjà brisé. - gertvdijk
@gertvdijk: Merci. Pour moi, cela fonctionne même sans la Host ligne. De même, "les chiffrements modernes tels que Advanced Encryption Standard ne sont actuellement pas susceptibles d'attaques en texte clair". (à partir du lien que vous avez ajouté) ... - krlmlr


Comme noté 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.)

39
2018-03-15 06:39



Comment fermer la liste des séquences d'échappement? - kristianp
Vous ne le faites pas, après avoir imprimé la liste des séquences d'échappement, c'est prêt à accepter la suivante. - Tejas Kale