Configurei minha conexão SSH da seguinte forma: ~/.ssh/config
no lado do cliente
ServerAliveInterval 1
ServerAliveCountMax 1200
e /etc/ssh/sshd_config
no lado do servidor:
ClientAliveInterval 5
ClientAliveCountMax 1200
Ainda assim, ao fazer login em um servidor remoto, e embora eu considere minha conexão bastante estável, vejo minha conexão SSH caindo continuamente após cerca de 15 a 60 segundos. ssh <server> -vvv
sempre termina com
...
debug3: send packet: type 80
debug3: receive packet: type 82
debug3: send packet: type 80
debug3: receive packet: type 82
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: receive packet: type 98
debug1: client_input_channel_req: channel 0 rtype [email protected] reply 1
debug3: send packet: type 100
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 80
debug3: send packet: type 1
Connection reset by <IP> port <PORT>
Enquanto estiver no lado do servidor:
...
debug3: receive packet: type 80
debug1: server_input_global_request: rtype [email protected] want_reply 1
debug3: send packet: type 82
debug3: receive packet: type 80
debug1: server_input_global_request: rtype [email protected] want_reply 1
debug3: send packet: type 82
debug2: channel 0: request [email protected] confirm 1
debug3: send packet: type 98
debug2: channel 0: request [email protected] confirm 1
debug3: send packet: type 98
debug2: channel 0: request [email protected] confirm 1
debug3: send packet: type 98
debug2: channel 0: request [email protected] confirm 1
debug3: send packet: type 98
...
O servidor realmente continua tentando novamente. Também em paralelo posso baixar algo ou até mesmo abrir uma conexão SSH paralela com o mesmo servidor.
Mas mesmo que tenha havido uma pequena interrupção, por que o cliente SSH não continua tentando novamente, mas sai prematuramente? Como posso configurar o SSH para (realmente) continuar tentando novamente?
Responder1
Não é estritamente uma solução para o meu problema, mas pelo menos sou capaz de contornar o problema executando um processo em outro shell que, em paralelo, efetua login no servidor remoto a cada segundo, como
while true ; do ssh <server> "date; sleep 1s"; done
Não sei por que, mas evita efetivamente os problemas colocados na minha pergunta inicial acima.