Eu estou tentando codificar um shell-script que usa uma conexão ssh para fazer "pulsações". Desejo encerrar o lado do cliente e do servidor dessa conexão após um certo tempo limite (após a queda da conexão).
O que eu encontrei até agora:
- TCPKeepAlive yes / no para ssh e sshd
- ClientAliveCountMax para sshd
- ClientAliveInterval para sshd
- ServerAliveCountMax para ssh
- ServerAliveInterval para ssh
Para alterar "ClientAliveCountMax", eu precisaria modificar o sshd_config em cada máquina de destino (essa opção está desativada por padrão).
Portanto, minha pergunta é - posso usar o "TCPKeepAlive" para meus propósitos também (sem alterar mais nada nas máquinas de origem / destino)?
O sistema operacional de destino é o SLES11 SP2 - mas não acho relevante aqui.
ControlMaster
opção e conexões escravo?Respostas:
Você provavelmente deseja usar as configurações do ServerAlive para isso. Eles não requerem nenhuma configuração no servidor e podem ser configurados na linha de comando, se desejar.
Isso enviará uma mensagem de manutenção de rotina ssh a cada 5 segundos e, se chegar a hora de enviar outra manutenção de manutenção, mas uma resposta para a última não foi recebida, a conexão será encerrada.
A diferença crítica entre
ServerAliveInterval
eTCPKeepAlive
é a camada em que eles operam.TCPKeepAlive
opera na camada TCP. Ele envia um pacote TCP ACK vazio. Os firewalls podem ser configurados para ignorar esses pacotes; portanto, se você passar por um firewall que interrompe conexões inativas, elas podem não manter a conexão ativa.ServerAliveInterval
opera na camada ssh. Na verdade, ele envia dados pelo ssh, para que o pacote TCP tenha criptografado os dados e um firewall não saiba se é um pacote de manutenção de atividade ou legítimo, para que funcionem melhor.fonte
Seconds between keepalives
para 1800 em Configurações | Conexão.A
TCPKeepAlive
opção é realmente um método muito diferente de manter as conexões ativas das opções do tipo ClientAlive ou ServerAlive.São por BSD página do manual SSH , podemos ler que:
O
TCPKeepAlive
certifique-se se o sistema deve enviar mensagens TCP keepalive para o outro lado. A opção padrão está sempre ativada.Se você estiver usando
ClientAliveInterval
, você pode desativarTCPKeepAlive
. Essa opção enviará uma mensagem através do canal criptografado para solicitar uma resposta do cliente (o padrão é 0, portanto, nenhuma mensagem será enviada ao cliente) eClientAliveCountMax
define o número de mensagens ativas do cliente antes que o sshd desconecte o cliente, encerrando o sessão.fonte