Linux no expira las conexiones SSH inactivas. Puede dejar una conexión SSH abierta indefinidamente, y siempre que ninguno de los puntos finales se reinicie u obtenga una nueva dirección IP, la conexión seguirá funcionando cuando acceda a ella después de un largo tiempo de inactividad.
Sin embargo, si hay middleboxes con estado (NAT, firewall, etc.), es probable que se agoten las conexiones inactivas. El resultado de eso es que, aunque la conexión está activa en ambos extremos, los dos puntos finales ya no pueden comunicarse porque el middlebox se niega a reenviar cualquier paquete hasta que el cliente SSH abra una nueva conexión.
Si conoce el tiempo de espera del middlebox, puede solucionar el problema configurando ClientAliveInterval
en /etc/ssh/sshd_config
el servidor o ServerAliveInterval
en ~/.ssh/config
el cliente. Para una detección óptima de conexiones rotas, es recomendable habilitar ambas configuraciones. Esto también detectará conexiones rotas cuando cualquiera de los puntos finales se haya reiniciado o haya obtenido una nueva dirección IP.
Como indica que el tiempo de espera a veces parece ser tan bajo como unos pocos segundos, esto podría no ser suficiente para resolver su problema. Un tiempo de espera aparente muy bajo puede ser causado por un CGN sobrecargado o mal configurado. Debe inspeccionar el tráfico en varios puntos de la ruta de comunicación para determinar si un CGN es responsable de las fallas.
Si resulta que las fallas son causadas por su ISP al hacer algo tonto, como las conexiones de equilibrio de carga a través de múltiples CGN que no comparten el estado de conexión, no puede solucionar el problema usted mismo simplemente ajustando su configuración SSH.
Si está atascado con un ISP con un CGN poco confiable que se niegan a arreglar, las únicas opciones restantes que conozco son actualizar el cliente y el servidor a las versiones de kernel con soporte MPTCP o usar una solución de túnel diseñada para tolerar espontánea cambios en las asignaciones de puertos en el NAT.