Qual é o tempo limite ocioso padrão para o OpenSSH?

25

Não consigo encontrar uma resposta para esta pergunta simples, necessária para documentação de conformidade.

Em uma instalação padrão do CentOS 6.5 (OpenSSH 5.3p1-94.el6), após quanto tempo de inatividade a sessão SSH de um usuário será encerrada? Acredito que o seguinte pode ser definido para aumentar o tempo limite ocioso, mas eles são comentados por padrão.

$ grep -i alive /etc/ssh/sshd_config
#TCPKeepAlive yes
#ClientAliveInterval 0
#ClientAliveCountMax 3

Além disso, existe um comando para despejar uma lista das sshdconfigurações atuais ? Não vejo nada man sshd.

Banjer
fonte
3
Algumas conchas podem ser definidas para sair após um tempo limite. Isso faria com que a sessão ssh terminasse. Verifique se sua variável de ambiente TMOUT está configurada.
Kenster

Respostas:

23

As linhas comentadas sshd_configgeralmente exibem os padrões. Este é o caso de todas as linhas da sua pergunta. Você pode verificar isso na página de sshd_configmanual . Aqui estão os trechos relevantes:

TCPKeepAlive

      Especifica se o sistema deve enviar mensagens de manutenção de atividade do TCP para o outro lado. Se forem enviados, a morte da conexão ou falha de uma das máquinas será notada corretamente. No entanto, isso significa que as conexões morrerão se a rota for interrompida temporariamente e algumas pessoas acham isso irritante. Por outro lado, se as keepalives do TCP não forem enviadas, as sessões poderão travar indefinidamente no servidor, deixando usuários "fantasmas" e consumindo recursos do servidor.

      O padrão é "yes" (para enviar mensagens de manutenção de TCP), e o servidor notará se a rede cair ou se o host do cliente travar. Isso evita sessões infinitamente suspensas.

      Para desativar as mensagens de manutenção de rotina do TCP, o valor deve ser definido como "não".

      Esta opção foi chamada anteriormente KeepAlive.

ClientAliveCountMax

      Define o número de mensagens ativas do cliente (veja abaixo) que podem ser enviadas sem o sshd (8) receber 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 ativas do cliente é muito diferente deTCPKeepAlive (abaixo)(acima). As mensagens ativas do cliente são enviadas pelo canal criptografado e, portanto, não serão falsificadas. A opção TCP keepalive ativada por TCPKeepAliveé falsificada. O mecanismo ativo do cliente é valioso quando o cliente ou o servidor depende de saber quando uma conexão se tornou inativa.

      O valor padrão é 3. Se ClientAliveInterval(veja abaixo) estiver definido como 15 e ClientAliveCountMaxpermanecer no padrão, os clientes SSH que não responderem serão desconectados após aproximadamente 45 segundos. Esta opção se aplica apenas ao protocolo versão 2.

ClientAliveInterval

      Define um intervalo de tempo limite em segundos, após o qual, se nenhum dado foi 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. Esta opção se aplica apenas ao protocolo versão 2.

jordanm
fonte
1
Corrija-me se estiver errado, mas se não houvesse firewall entre mim e a máquina (com configurações padrão), nunca seria desconectado? Sei que nosso firewall descarta conexões TCP inativas após 60 minutos; é aí que as conexões ociosas de fechamento estão acontecendo. Eu só queria verificar e ver se o OpenSSH fecha explicitamente as sessões. Acho que a resposta é Não, o openssh não fecha explicitamente as conexões ociosas, mas os firewalls normalmente o fazem. As configurações mencionadas na sua resposta realmente ajudam a persistir a conexão ou a finalizar corretamente a sessão, caso ela caia.
Banjer
2
O texto citado diz que o padrão para ClientAliveInterval é 0, o que significa que ele não define um intervalo de tempo durante o qual uma conexão permanece aberta. E, no entanto, sabemos que o intervalo de tempo tem algum valor finito por padrão. Portanto, parece que deve haver algum outro parâmetro que defina quanto tempo a conexão permanece aberta por padrão. Se minha análise acima estiver correta, suponha que o servidor e o cliente sejam máquinas linux executando o openssh e que ambos usem todos os padrões. Nesse caso, de que lado define o padrão, qual é o seu valor e onde está definido?
Ben Crowell
2
@BenCrowell E, no entanto, sabemos que o intervalo de tempo tem algum valor finito por padrão. Qual intervalo de tempo e como você sabe disso?
Piotr Dobrogost
9

Você pode configurar o keepalive SSH para o lado do cliente ou do servidor:

Lado do cliente

Arquivo: /etc/ssh/ssh_config

Conteúdo:

Host *
ServerAliveInterval XX
ServerAliveCountMax YY

Lado do servidor

Arquivo: /etc/ssh/sshd_config

Conteúdo:

ClientAliveInterval XX
ClientAliveCountMax YY

Extraído de: http://www.sysadmit.com/2016/02/linux-y-vmware-ssh-evitar-desconexion.html

Yamanoteone
fonte
6
Útil, mas não responde à pergunta de forma alguma.
bzeaman
6

O OpenSSH não encerrará uma sessão de shell que esteja ociosa por algum tempo. Isso não é algo que o OpenSSH faz. O encerramento de uma sessão de shell inativa não está relacionado à configuração do OpenSSH.

As configurações que você está mostrando estão relacionadas ao tempo limite quando a conexão é desativada e não estão relacionadas ao shell no host remoto e ao que o usuário está fazendo ou não fazendo lá.

O shell do host remoto pode terminar (ou pode ser morto por outro processo) após algum tempo ocioso, mas isso não está relacionado à configuração do serviço SSH no servidor e do seu cliente SSH.

Palavras-chave:


Para despejar a sshdconfiguração, use o "modo de teste estendido" como raiz:

sshd -T

Isso está documentado no o sshd(8)Manual (olhando paraOpenSSH_7.7, LibreSSL 2.7.2 no OpenBSD aqui):

-T

Modo de teste estendido. Verifique a validade do arquivo de configuração, a configuração efetiva para stdout e saia . Opcionalmente, as regras de correspondência podem ser aplicadas especificando os parâmetros de conexão usando uma ou mais -Copções.

Esta opção foi adicionada ao sshdOpenSSH 5.1 / 5.1p1 em 2008.

Kusalananda
fonte
3

Se o requisito é fechar a conexão SSH após um período de inatividade, os próprios shells fornecem variáveis ​​de tempo limite.

Para o bash:

TMOUT: Se configurado para um valor maior que zero, TMOUT será tratado como o tempo limite padrão para a leitura incorporada. O comando select termina se a entrada não chegar após segundos de TMOUT quando a entrada vier de um terminal. Em um shell interativo, o valor é interpretado como o número de segundos para aguardar a entrada após a emissão do prompt primário. O Bash termina depois de aguardar esse número de segundos se a entrada não chegar.

teste isso executando TMOUT=10e aguarde 10 segundos para fechar a conexão.

Para tcsh:

A variável do shell de saída automática pode ser configurada para sair ou bloquear o shell após um determinado número de minutos de inatividade.

No tcsh, a sintaxe para definir o tempo limite por dez minutos é set autologout=10. Isso não funciona no csh original.

Sandeep kumar singh
fonte
-2

Se você deseja que o tempo limite seja de 10 segundos para todos, faça o seguinte para a configuração do servidor (sshd_config):

ClientAliveInterval 10
ClientAliveCountMax 0

Se você deseja que o tempo limite seja de 10 segundos para clientes locais, faça o seguinte para a configuração do cliente (ssh_config):

ServerAliveInterval 10
ServerAliveCountMax 0

Se o parâmetro AliveCountMax for diferente de zero, provavelmente não funcionará porque o servidor responderá redefinindo o timer (a menos que haja um problema de conexão). Você pode ver isso executando o cliente ssh com a depuração ativada.

JohnA
fonte