web-dev-qa-db-fra.com

Manière d'éviter le délai de 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 utiliser Ctrl-C pour tuer le processus ssh ou quoi que ce soit).

Ceci est dans le gnome-terminal de Ubuntu bien qu'il semble mettre en pause l'entrée/la sortie du terminal, 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.

Alors, y a-t-il un moyen d'empêcher/de regagner le terminal des connexions ssh qui ont expiré?

229
Kzqai

sshd (le serveur) ferme la connexion s'il n'entend plus rien du client. Vous pouvez demander à votre client d’envoyer de temps en temps un signal de signe de vie au serveur.

La configuration pour cela est dans le fichier ~/.ssh/config. Pour envoyer le signal toutes les quatre minutes à remotehost, indiquez 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

Veillez également à exécuter chmod 600 ~/.ssh/config, car le fichier de configuration ne doit pas être lisible par tout le monde.

254
Ludwig Weinzierl

Presse Enter~. l'un après l'autre pour vous déconnecter d'une session gelée.

La section "ESCAPE CARACTERS" de la page de manuel ssh explique les détails sous-jacents.

243
Peter Eisentraut

Même si ce n’est pas une réponse directe à votre question, elle est étroitement liée au problème que vous avez. Au lieu d'essayer de maintenir la connexion active (toutes les connexions finissent par mourir), vous pouvez utiliser des multiplexeurs de terminaux, tels que screen et tmux, qui maintiennent la session active 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 créera et joindra une nouvelle session:

$ screen

Ensuite, vous travaillez avec Shell comme vous le feriez normalement. Désormais, si la connexion est interrompue, lorsque vous pouvez vous reconnecter au serveur via SSH, vous obtenez une liste des sessions en cours avec:

$ screen -ls

Pour vous 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'avez laissé!

Vous pouvez même déconnecter la session et vous reconnecter de chez vous pour reprendre le point exact où vous l'avez laissé. Pour détacher la session, utilisez C-a suivi de C-d (thats Control + A et ensuite Control + D).

Il y a tutoriel en ligne simple aussi.

L'utilisation de screen et tmux sur des serveurs distants est considérée comme une meilleure pratique et est hautement recommandée . Certaines personnes vont jusqu'à avoir screen comme shell de connexion par défaut. Ainsi, lorsqu'elles se connectent, elles démarrent immédiatement une nouvelle session screen.

37
fotos

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

11
Fergie

Vous pouvez également définir un délai d'inactivité du côté du 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 à partir du serveur plutôt que du client.

Extrait de:

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

5
Ladinfremes

Pour les personnes qui souhaitent empêcher le client d’arriver à la fin de sa vie.

Vous pouvez essayer de définir ConnectTimeout 0 dans le fichier de configuration. La valeur 0 signifie que la connexion sera maintenue indéfiniment sauf si elle est fermée.

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

Host *
   ConnectTimeout 0
1
Yohannes Libanos