O que o ServerAliveCountMax no SSH realmente faz?
Estou tentando garantir que, quando eu me conecto ao meu servidor via SSH, a conexão permaneça aberta por um longo período de tempo, em vez de a conexão acabar após um curto período de inatividade. Este é o exemplo
Host *
ServerAliveInterval 60
ServerAliveCountMax 2
Ouvi de uma fonte que a configuração acima sempre envia uma resposta ao servidor a cada 60 segundos, desde que o servidor receba essa resposta. No entanto, se por algum motivo a resposta não for enviada ao servidor, ela tentará enviar outra mensagem. Se essa mensagem também falhar, ela fechará a conexão. (Eu sinto que isso está errado)
A segunda e terceira fonte, no entanto, dizem algo diferente. Eles afirmam que uma mensagem será enviada ao servidor a cada 60 segundos, se houver um período de inatividade, mas somente enviará duas solicitações e depois fechará a conexão.
Então, o que exatamente ServerAliveCountMax faz?
Interval
conjunto para0
desativá-la. Mas não está claro se você definirMax
a0
. Envia infinitos pings vivos, ou nenhum?As mensagens ativas do servidor são úteis quando um servidor SSH foi configurado para fechar conexões após um período de tempo sem tráfego (os provedores de hospedagem compartilhada na Web que oferecem acesso SSH quase sempre fazem isso, por exemplo). A definição dessas duas opções envia um pacote a cada
ServerAliveInterval
segundo, por um período máximo deServerAliveCountMax
tempo, mantendo assim a sessão ativa.Para responder aos comentários sobre a incerteza de definir qualquer uma das opções
0
, li o código fonte daopenssh
implementação e aqui está o que vejo ...A configuração
ServerAliveInterval
para0
NÃO enviará os pacotes, mas manterá a sessão ativa indefinidamente, assumindo que a conexão não foi interrompida devido ao tempo limite do TCP e que o servidor não está configurado para eliminar clientes inativos.Definir
ServerAliveCountMax
para0
tem o mesmo efeito que definirServerAliveInterval
para0
.Definir um valor como negativo ou algo maior que
INT_MAX
(ou seja, 2.147.483.647) resultará em um erro "valor inteiro ..." .Definir
ServerAliveCountMax
entreINT_MAX/1000+1
(ie 2.147.484) aINT_MAX
(ou seja 2.147.483.647) também seria equivalente a definir qualquer valor para0
.Portanto, em essência, o maior tempo limite que você pode obter (enquanto ainda envia os pacotes) é
INT_MAX/1000
(ou seja, 2.147.483). Com um tempo limite esgotado1
e nenhum tráfego nas sessões, você recebe quase 25 dias.Obviamente, outras implementações do SSH podem ter resultados diferentes.
fonte