
Usando o ssh, estou logando em outro sistema e executando scripts que criam novas máquinas e faço algumas configurações. Demora cerca de 7 a 8 horas. Então o que aconteceu é que a conexão ssh continua caindo e sempre recebo tempo limite com a execução malsucedida do script.
Então agora estou usando este argumento junto com a conexão ssh:
ssh -o ServerAliveInterval=60 user@host ....
Este ssh é gerado várias vezes. O problema é que depois de algumas conexões ssh, estou recebendo um erro:
too many logins of user
e as conexões ssh posteriores são fechadas logo após logins bem-sucedidos.
Então é o comportamento doServerAliveInterval, que mantém ativa a sessão de login do usuário ssh na máquina remota, mesmo após o término do trabalho do ssh e é por isso que meus logins adicionais são desconectados?
Responder1
Não acho que isso mantenha uma sessão ativa, se o seu cliente perder a conexão. Provavelmente são essas opções do lado do servidor:
ClienteAliveCountMax
Define o número de mensagens ativas do cliente que podem ser enviadas sem que o sshd(8) receba nenhuma mensagem do cliente. Se esse limite for atingido enquanto as mensagens ativas do cliente estiverem sendo enviadas, o sshd desconectará o cliente, encerrando a sessão. É importante observar que o uso de mensagens client alive é muito diferente do TCPKeepAlive. As mensagens ativas do cliente são enviadas através do canal criptografado e, portanto, não serão falsificáveis. A opção TCP keepalive habilitada por TCPKeepAlive é falsificável. O mecanismo de cliente ativo é valioso quando o cliente ou servidor depende de saber quando uma conexão se tornou inativa.
O valor padrão é 3. Se ClientAliveInterval for definido como 15 e ClientAliveCountMax for deixado no padrão, os clientes SSH que não responderem serão desconectados após aproximadamente 45 segundos.
ClienteAliveInterval
Define um intervalo de tempo limite em segundos após o qual, se nenhum dado for recebido do cliente, o sshd(8) enviará uma mensagem através do canal criptografado para solicitar uma resposta do cliente. O padrão é 0, indicando que essas mensagens não serão enviadas ao cliente.
Talvez a verdadeira solução para o seu problema esteja no uso de um multiplexador de terminal como screen ou tmux. Eles permitem que seu login e os programas em execução durem mesmo se sua conexão cair. Você pode reconectar-se ao terminal a qualquer momento, incluindo a saída dos programas em execução. Além disso, você pode usá-lo para ter mais de um terminal em sua única conexão ssh. Como o seu servidor parece limitar suas sessões ssh, isso também pode ser útil. Você pode encontrar umintrodução à tela aqui, mas existem muitos outros por aí.
Responder2
Então é o comportamento do ssh
ServerAliveInterval
que mantém ativa a sessão de login do usuário ssh na máquina remota, mesmo após o término do trabalho do ssh e é por isso que meus logins adicionais são desconectados?
Não. Isso significa enviar mensagens de manutenção de atividade que verificam sua conexão e evitam desconexões automáticas em SSH ou em níveis inferiores. Se quiser iniciar scripts de longa execução, você deve usar nohup
, screen
ou tmux
no lado remoto. Ele manterá seus scripts em execução mesmo após a desconexão e com os dois segundos, você poderá reconectar os terminais existentes.
Responder3
Você provavelmente está recebendo esses erros após ativar ServerAliveInterval=60
porque suas conexões permanecem ativas. Seu padrão de conexões/comandos ssh para esse servidor está acumulando mais conexões simultâneas do que o servidor está configurado para permitir.
Suas conexões costumavam morrer, fazendo com que sua contagem de conexões simultâneas fosse menor, e o servidor ficava satisfeito com isso (sem conexões rejeitadas), mas você não estava satisfeito.
Descubra a configuração desse servidor em relação à contagem máxima de conexões simultâneas e fique dentro desse limite ou negocie com o administrador do servidor para aumentar o limite para você (ou talvez até para todos).