O Linux não desacelera as conexões SSH ociosas. Você pode deixar uma conexão SSH aberta indefinidamente e, desde que nenhum ponto de extremidade tenha sido reinicializado ou tenha recebido um novo endereço IP, a conexão continuará funcionando quando você acessá-lo após um longo tempo ocioso.
No entanto, se houver alguma caixa central com informações de estado (NAT, firewall etc.), é provável que atinjam o tempo limite de conexões inativas. O resultado disso é que, mesmo que a conexão esteja viva em ambas as extremidades, os dois terminais não podem se comunicar mais porque o middlebox se recusa a encaminhar todos os pacotes até que o cliente SSH abra uma nova conexão.
Se você souber o tempo limite da middlebox, poderá solucionar o problema configurando ClientAliveInterval
in /etc/ssh/sshd_config
no servidor ou ServerAliveInterval
in ~/.ssh/config
no cliente. Para a detecção ideal de conexões interrompidas, é aconselhável habilitar ambas as configurações. Isso também detectará conexões quebradas quando um ponto de extremidade for reinicializado ou tiver recebido um novo endereço IP.
Como você indica que o tempo limite às vezes parece ser tão baixo quanto alguns segundos, isso pode não ser suficiente para resolver seu problema. Um tempo limite aparente muito baixo pode ser causado por um CGN sobrecarregado ou mal configurado. Você precisa inspecionar o tráfego em vários pontos do caminho de comunicação para descobrir se um CGN é responsável pelas falhas.
Se as falhas forem causadas pelo ISP fazendo algo tolo, como conexões de balanceamento de carga em vários CGNs que não compartilham o estado da conexão, você não poderá corrigir o problema sozinho simplesmente ajustando a configuração do SSH.
Se você estiver preso a um ISP com um CGN não confiável que ele se recusa a corrigir, as únicas opções restantes que eu conheço são atualizar cliente e servidor para versões de kernel com suporte a MPTCP ou usar uma solução de encapsulamento projetada tolerar mudanças espontâneas nos mapeamentos de portas no NAT.