web-dev-qa-db-fra.com

Comment empêcher le gel de mes sessions SSH?

J'ai ServerAliveInterval et dans le cas de quelques machines également ClientAliveInterval défini sur 540 dans les fichiers de configuration client/serveur SSH (je suppose que le paramétrer sur plus que cela ne serait pas une bonne idée). Je travaille avec de nombreuses sessions SSH qui se bloquent actuellement après quelques minutes.

Comment puis-je le réparer? Ce que je veux, c'est d'avoir une session à ne pas geler du tout, de sorte que si j'ouvre une session à 8 heures et que je ne l'utilise pas pendant 4 heures, par exemple, pour la réutiliser à 12 heures sans avoir à me reconnecter .

79
syntagma

Les modifications que vous avez apportées à /etc/ssh/ssh_config et /etc/ssh/sshd_config sont corrects mais n'auront toujours aucun effet.

Pour que votre configuration fonctionne, effectuez ces modifications de configuration sur le client:

/etc/ssh/ssh_config

Host *
ServerAliveInterval 100

ServerAliveInterval Le client enverra un paquet nul au serveur toutes les 100 secondes pour maintenir la connexion active

Paquet NULL Est envoyé par le serveur au client. Le même paquet est envoyé par le client au serveur. A TCP NULL ne contient aucun indicateur de contrôle comme SYN, ACK, FIN etc. car le serveur ne nécessite pas de réponse du client. Le paquet NULL est décrit ici: https://tools.ietf.org/html/rfc6592

Configurer ensuite la partie sshd sur le serveur.

/etc/ssh/sshd_config

ClientAliveInterval 60
TCPKeepAlive yes
ClientAliveCountMax 10000

ClientAliveInterval Le serveur attendra 60 secondes avant d'envoyer un paquet nul au client pour maintenir la connexion en vie

TCPKeepAlive Est-ce pour garantir que certains pare-feu ne suppriment pas les connexions inactives.

ClientAliveCountMax Le serveur enverra des messages vivants au client même s'il n'a reçu aucun message du client.

Enfin, redémarrez le ssh server

service ssh restart ou service sshd restart selon le système sur lequel vous vous trouvez.

94

Suggestion personnelle: utilisez screen sur l'hôte distant; il parviendra à maintenir votre connexion en vie tant qu'elle restera active dans un terminal.

Voici ce que j'ajoute généralement à /etc/screenrc pour une identification rapide de mes sessions écran:

hardstatus alwayslastline
hardstatus string "%{= kG}[ %{G}%H %{g}][ %{=kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B}%Y-%m-%d %{W}%c %{g}]"
defscrollback 8192

MODIFIER: Astuces.

La chaîne hardstatus affichera une ligne d'état inférieure comme celle-ci: Screen session example with three open tabs

Le tampon de défilement est également étendu à 8 192 lignes au lieu des 1000 à 1500 habituels (selon la distribution).

13
user86969

Avec OpenSSH:

Vous devez activer

TCPKeepAlive yes

à la fois dans votre client ssh_config (par exemple /etc/ssh/ssh_config ou dans ~/.ssh/config) et votre serveur SSH de destination exécutant OpenSSH (par exemple/etc/ssh/sshd_config).

Ainsi, chaque fois que votre connexion est inactive, OpenSSH envoie un paquet factice à votre hôte de destination ...

2
Martin Allert

Si le problème est un ordinateur portable en veille prolongée ou une connexion réseau inférieure à celle d'un préfet, je recommanderais d'utiliser mosh qui s'exécute sur ssh et permet la reconnexion automatique.

Depuis le site Web :

Mosh (coque mobile)

Application de terminal distant qui permet l'itinérance, prend en charge la connectivité intermittente et fournit un écho local intelligent et une modification de ligne des frappes utilisateur.

Mosh est un remplacement pour SSH. Il est plus robuste et réactif, en particulier sur les liaisons Wi-Fi, cellulaires et longue distance.

Mosh est un logiciel gratuit, disponible pour GNU/Linux, BSD, macOS, Solaris, Android, Chrome et iOS.

En combinaison avec tmux (ou l'ancienne screen), cela me permet de me connecter via ssh à un serveur à partir de mon ordinateur portable et de rester connecté pendant des jours même lorsque vous changez les connexions wifi et abandons de données mobiles survivants.

2
Tom Hale

Vérifiez votre configuration sshd sur la machine hôte /etc/sshd_config pour IdleTimeout setting .

IdleTimeout time
Sets idle timeout limit to time in seconds (s or nothing afternumber), 
in minutes (m), in hours (h), in days (d), or in weeks (w).If the 
connection have been idle (all channels) for that long time thechild 
process is killed with SIGHUP, and connection is closed down.
1
iyrin

Dans mon cas, le problème était en grande taille MTU. Vous pouvez changer MTU sur le routeur si vous utilisez NAT, mais je change MTU sur le serveur:

Sudo /sbin/ifconfig eth0 mtu 1036
Sudo /etc/init.d/networking restart
0
Vasin Yuriy

Un petit hack que j'utilise s'il n'est pas possible d'utiliser l'écran, ou de modifier les paramètres du serveur ssh des hôtes, ou l'une des bonnes et bonnes suggestions ci-dessus ...

Courez juste en haut chaque fois que vous allez laisser la session seule.

En général, cela le maintiendra en vie indéfiniment, bien que, comme d'autres l'ont mentionné, cela ne soit pas toujours judicieux en matière de sécurité!

0
technicalbloke