Linux n'expire pas les connexions SSH inactives. Vous pouvez laisser une connexion SSH ouverte indéfiniment, et tant qu'aucun des points de terminaison n'a été redémarré ou n'a obtenu une nouvelle adresse IP, la connexion fonctionnera toujours lorsque vous y accéderez après une longue période d'inactivité.
Cependant, s'il existe des boîtiers intermédiaires avec état (NAT, pare-feu, etc.), ceux-ci sont susceptibles d'expiration des connexions inactives. Le résultat de cela est que même si la connexion est vivante aux deux extrémités, les deux points de terminaison ne peuvent plus communiquer car le boîtier de médiation refuse de transmettre des paquets jusqu'à ce que le client SSH ouvre une nouvelle connexion.
Si vous connaissez le délai d' attente du middlebox, vous pouvez contourner le problème en configurant ClientAliveInterval
dans /etc/ssh/sshd_config
sur le serveur ou ServerAliveInterval
dans ~/.ssh/config
le client. Pour une détection optimale des connexions rompues, il est conseillé d'activer les deux paramètres. Cela détectera également les connexions rompues lorsque l'un des terminaux a été redémarré ou a obtenu une nouvelle adresse IP.
Étant donné que vous indiquez que le délai d'attente semble parfois être aussi bas que quelques secondes, cela peut ne pas être suffisant pour résoudre votre problème. Un délai d'attente apparent très faible peut être provoqué par un CGN surchargé ou mal configuré. Vous devez inspecter le trafic à différents points du chemin de communication afin de déterminer si un CGN est responsable des échecs.
S'il s'avère que les échecs sont causés par votre FAI faisant quelque chose de stupide, comme l'équilibrage de charge des connexions sur plusieurs CGN qui ne partagent pas l'état de connexion, vous ne pouvez pas résoudre le problème vous-même en modifiant simplement votre configuration SSH.
S'il vous arrive d'être coincé avec un FAI avec un CGN peu fiable qu'ils refusent de réparer, les seules options restantes que je connais sont soit de mettre à niveau le client et le serveur vers les versions du noyau avec prise en charge MPTCP ou d'utiliser une solution de tunnel conçue pour tolérer spontanément changements dans les mappages de ports sur le NAT.