2010-01-20 23:33:01 +0000 2010-01-20 23:33:01 +0000
236
236

Comment éviter le dépassement du temps de connexion ssh et le gel du terminal GNOME

Lorsque je me connecte via ssh à certains serveurs, le temps s'écoule et le terminal est “gelé” (il n'accepte pas d'entrée, ne se déconnecte pas, ne peut pas faire Ctrl-C pour tuer le processus ssh ou autre).

C'est dans le 0x6 d'Ubuntu& bien que cela semble mettre en pause l'entrée/sortie du terminal, et n'affecte pas le fonctionnement du logiciel de terminal GNOME lui-même. Donc moins un bug avec gnome-terminal qu'une incohérence ennuyeuse avec ssh.

Alors, y a-t-il un moyen d'empêcher/rétablir le terminal à partir de connexions ssh qui ont été interrompues ?

Réponses (7)

259
259
259
2010-01-20 23:53:48 +0000

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

La configuration pour cela se trouve dans le fichier ~/.ssh/config. Pour envoyer le signal toutes les quatre minutes à remotehost, mettez ce qui suit dans votre fichier ~/.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 d'exécuter chmod 600 ~/.ssh/config, car le fichier de configuration ne doit pas être lisible par tous.

250
250
250
2010-01-20 23:44:01 +0000

Appuyez sur les touches Enter, ~, . l'une après l'autre pour vous déconnecter d'une session gelée.

La section “ESCAPE CARACTERISTIQUES” de la page de manuel ssh explique les détails sous-jacents.

39
39
39
2012-07-03 01:28:14 +0000

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 maintenir 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 vie en arrière-plan même si votre terminal est déconnecté.

Essentiellement, lorsque vous vous connectez au serveur SSH, vous lancez immédiatement screen qui créera et attachera une nouvelle session :

$ screen

Ensuite, vous continuez et faites votre travail avec le shell comme vous le feriez normalement. Maintenant, si la connexion est interrompue, lorsque vous pouvez vous reconnecter au serveur par SSH, vous obtenez une liste des sessions en cours :

$ screen -ls

Pour se rattacher à une session :

$ screen -r <session>

<session> est le PID ou un nom de session. Vous serez reconnecté à votre session et vous pourrez reprendre là où vous vous êtes arrêté !

Vous pouvez même détacher la session et vous reconnecter de chez vous pour reprendre exactement là où vous vous êtes arrêté. Pour déconnecter la session, utilisez C-a suivi de C-d (c'est-à-dire Control + A et ensuite Control + D).

Il y a aussi un simple tutoriel en ligne .

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 même jusqu'à avoir screen comme shell de connexion par défaut, de sorte que lorsqu'elles se connectent, elles commencent immédiatement une nouvelle session screen.

12
12
12
2014-02-06 14:13:27 +0000

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

6
6
6
2016-02-12 22:45:27 +0000

Vous pouvez également définir un intervalle 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 depuis le serveur, plutôt que depuis le client.

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

2
2
2
2015-12-17 02:19:43 +0000

Pour les personnes qui veulent éviter que le client n'ait un temps d'arrêt en premier lieu.

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

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

Host *
   ConnectTimeout 0
0
0
0
2020-01-24 11:55:41 +0000

Dans mon cas, le problème se situait au niveau de la grande taille de MTU. Vous pouvez changer de MTU sur le routeur si vous utilisez la NAT, mais je change de MTU sur le serveur :

sudo /sbin/ifconfig eth0 mtu 1036
sudo /etc/init.d/networking restart

Sur Windows, vous pouvez également augmenter cette clé :

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"TcpMaxDataRetransmissions"=dword:00000010