Question Manière d'éviter le délai d'expiration de la connexion ssh et le gel du terminal GNOME


Lorsque je me connecte via ssh à certains serveurs, il expire et "gèle" le terminal (n'accepte pas les entrées, ne se déconnecte pas, ne peut pas Ctrl-C pour tuer le processus ssh ou autre).

Ceci est dans Ubuntu gnome-terminal Cependant, il semble que la mise en veille / sortie du terminal soit suspendue et n'affecte pas le fonctionnement du logiciel du terminal GNOME lui-même. Donc moins un bug avec gnome-terminal qu'une incohérence gênante avec ssh.

Y a-t-il un moyen d'empêcher / de récupérer le terminal à partir de connexions ssh qui ont expiré?


217
2018-01-20 23:33


origine


Duplicata possible de Comment garder un tunnel SSH ouvert? - Murmel


Réponses:


sshd (le serveur) ferme la connexion s’il n’entend rien du client pendant un certain temps. Vous pouvez demander à votre client d’envoyer un signal de sécurité au serveur de temps en temps.

La configuration pour cela est dans le fichier ~/.ssh/config. Pour envoyer le signal toutes les quatre minutes à remotehost, mettre ce qui suit dans votre ~/.ssh/config.

Host remotehost
  HostName remotehost.com
  ServerAliveInterval 240

C'est ce que j'ai dans mon ~/.ssh/config.

Pour l'activer pour tous les hôtes, utilisez:

Host *
  ServerAliveInterval 240

Assurez-vous également de courir chmod 600 ~/.ssh/config, car le fichier de configuration ne doit pas être lisible par tous.


244
2018-01-20 23:53



Merci beaucoup de m'avoir aidé avec le libellé, c'est très apprécié. J'ai changé "ne devrait pas" revenir à "ne doit pas" parce que ssh vérifie les permissions du fichier et s'il est lisible en monde ou en groupe, il échoue. - Ludwig Weinzierl
Ce n'est pas ce que le PO a demandé. Il ne se fait pas expulser à cause de l'inactivité. Il essaie de se connecter et son terminal est gelé. - Cerin
Où est-ce ~/.ssh/config? - User
@User '~ /' représente votre dossier personnel. '.ssh' est un dossier dans votre dossier personnel. - wkm
c'est inutile si votre connexion est en train de se perdre ... - so12311


presse Entrer, ~, . l'un après l'autre pour se déconnecter d'une session gelée.

La section "CARACTÈRES D'ÉCHAPPEMENT" de la page de manuel de ssh explique les détails sous-jacents.


231
2018-01-20 23:44



Cette réponse me semble répondre plus précisément à la question et, en tout cas, était la réponse que je cherchais. - CoatedMoose
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
@adityamenon Non, EscapeChar ~ est déjà la valeur par défaut intégrée. - Peter Eisentraut
@Mark la question demande "existe-t-il un moyen d'empêcher la récupération du terminal à partir de connexions ssh qui ont expiré? "Emphase le mien. - CoatedMoose
Bien que ce soit incorrect dans le contexte de la question, c'est exactement ce que je voulais. - Subin Sebastian


Même si ce n'est pas une réponse directe à votre question, elle est fortement liée au problème que vous avez. Au lieu d'essayer de garder la connexion en vie (toutes les connexions finissent par mourir), vous pouvez utiliser des multiplexeurs de terminaux, comme screen et tmux qui maintiennent la session en arrière-plan même si votre terminal est déconnecté.

Essentiellement, lorsque vous vous connectez au serveur SSH, vous exécutez immédiatement screen qui va créer et attacher une nouvelle session:

$ screen

Ensuite, vous allez de l'avant et faites votre travail avec la coquille comme vous le feriez normalement. Maintenant, si la connexion est supprimée, lorsque vous pouvez revenir en ligne et vous reconnecter au serveur via SSH, vous obtenez une liste des sessions en cours avec:

$ screen -ls

Se rattacher à une session:

$ screen -r <session>

<session> est le PID ou un nom de session. Vous serez reconnecté à votre session et vous pourrez continuer là où vous l'aviez laissé!

Vous pouvez même détacher la session et vous reconnecter depuis chez vous pour reprendre le point exact où vous vous êtes arrêté. Pour détacher la session que vous utilisez C-a suivi par C-d (c'est Control + A et alors Control + D).

Il y a tutoriel en ligne simple ainsi que.

En utilisant screen et tmux sur les serveurs distants est considéré comme un meilleur entrainement et est hautement recommandé. Certaines personnes vont jusqu'à avoir screen comme leur shell de connexion par défaut, alors quand ils se connectent ils commencent immédiatement une nouvelle screen session.


38
2017-07-03 01:28



une autre alternative consiste à utiliser mosh: mosh.mit.edu - Zombies
Ceci est particulièrement utile si vous utilisez un hotspot ou un wifi qui parfois tombe en panne. - Randall


Essayez de joindre -o ServerAliveInterval=30 à votre chaîne de connexion (30 signifie 30 secondes et peut bien sûr être ajusté)


11
2018-02-06 14:13





Vous pouvez également définir un intervalle de délai d'inactivité du côté serveur SSH:

Fichier: /etc/ssh/ssh_config

Contenu:

ClientAliveInterval XX
ClientAliveCountMax YY

Cela fonctionne exactement de la même manière que le paramètre client, mais les paquets nuls sont envoyés depuis le serveur plutôt que vers le client.

Extrait de:

http://www.sysadmit.com/2016/02/linux-y-vmware-ssh-evitar-desconexion.html


5
2018-02-12 22:45





Pour les personnes qui veulent empêcher le client de s’extirper d’abord.

Vous pouvez essayer de définir ConnectTimeout 0 dans le fichier de configuration. La valeur 0 signifie que la connexion sera maintenue en vie indéfiniment à moins d'être fermée.

Votre fichier de configuration (ou ssh_config) pourrait ressembler à ceci:

Host *
   ConnectTimeout 0

1
2017-12-17 02:19