Eu tive problemas com o tempo limite do ssh, encontrei uma solução alternativa usando:
sudo sysctl -w net.ipv4.tcp_keepalive_time=50 \
net.ipv4.tcp_keepalive_intvl=10 \
net.ipv4.tcp_keepalive_probes=5
Estou usando um servidor Ubuntu 14.04.4, executando sshd OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.8, OpenSSL 1.0.1f 6 Jan 2014
.
O servidor também está executando a estrutura DPDK da Intel, para desenvolver software de rede; parte de fazer isso envolve derrubar interfaces no nível do Linux para vinculá-las ao DPDK. No entanto, a interface de rede usada para o ssh de fora nunca é ativada ou desativada, apenas outras são tocadas.
Na maioria das vezes o ssh funciona bem, mas uma vez a cada poucos dias ele pára de funcionar; As sessões ssh são interrompidas e, ao tentar reconectar executando ssh -v
, a mensagem Local version string SSH-2.0 ...
(ou seja, o cliente pode estabelecer uma conexão, é a parte SSH que falha).
Conectar-se diretamente à máquina também não funciona, a interface de linha de comando não aparece, apenas uma tela em branco.
As conexões TCP podem ser estabelecidas e a máquina ainda responde a pings.
Isso é muito chato, já que o servidor precisa ser reinicializado.
Eu habilitei os logs debug3 no servidor, e o login em /var/log/auth.log
quando um cliente tenta (e falha) se conectar tem esta aparência:
sshd[1688]: debug3: fd 5 is not O_NONBLOCK
sshd[1688]: debug1: Forked child 39149.
sshd[1688]: debug3: send_rexec_state: entering fd = 13 config len 724
sshd[1688]: debug3: ssh_msg_send: type 0
sshd[1688]: debug3: send_rexec_state: done
sshd[39149]: debug3: oom_adjust_restore
sshd[39149]: Set /proc/self/oom_score_adj to 0
sshd[39149]: debug1: rexec start in 5 out 5 newsock 5 pipe 12 sock 13
Este log não parece diferente daquele para conexões bem-sucedidas, exceto que ele pára por aí, enquanto conexões bem-sucedidas continuam (a próxima linha é debug1: inetd sockets after dupping: ...
).
O problema parece surgir quando uma interface é ligada ou não do DPDK.
O que poderia estar causando isso? Existem soluções alternativas?
Eu tive problemas com o tempo limite do ssh, encontrei uma solução alternativa usando:
sudo sysctl -w net.ipv4.tcp_keepalive_time=50 \
net.ipv4.tcp_keepalive_intvl=10 \
net.ipv4.tcp_keepalive_probes=5
Tags sshd