Este artigo compartilha uma configuração para desconectar sessões SSH ociosas automaticamente. É útil para encerrar conexões ssh que não tem resposta do programa cliente no período configurado no servidor, evitando o uso desnecesário de recursos do servidor remoto que está sendo acessado.
O que é uma sessão SSH ociosa ?
O cliente(programa) não deve deixar de responder somente porque o usuário(humano) se afastou do teclado, para tomar café, almoçar, dormir ou algo do tipo. Caso o usuário(humano) não interaja com a sessão ssh, o cliente ssh(programa) ainda receberá pacotes enviados do servidor se houver conexão.
Após uma conexão usando um cliente ssh(programa) ser estabelecida com um servidor, uma sessão do SSH somente fica ociosa se não hauver atividade na conexão, que fique claro quando mencionei ativade na conexão me refiro ao cliente(programa) estiver congelado(sem responder) ou a conexão foi interrompida.
Você pode listar todas as conexões ssh ativas e verificar o tempo ocioso do host de origem individual usando o comando w.
O Truque para desconectar uma sessão SSH ociosa é usar duas opções de configuração descritas abaixo com valores apropriados para alcançar o objetivo, ou seja, desconectar uma sessão SSH ociosa(conexão inativa).
ClientAliveCountMax
Define o número de mensagens do cliente que podem ser enviadas sem que o sshd(8) receba nenhuma mensagem de volta do cliente. Se este limite for atingido enquanto as mensagens do client live estiverem sendo enviadas, o sshd desconectará o cliente, encerrando a sessão. É importante notar que o uso do cliente mensagens vivas é muito diferente de TCPKeepAlive. As mensagens vivas do cliente são enviadas através do canal criptografado e, portanto, não serão falsificável. A opção TCP keepalive habilitada pelo TCPKeepAlive é spoofable. O mecanismo cliente ativo é valioso quando o cliente ou servidor depende ao saber quando uma conexão ficou 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. Definir um ClientAliveCountMax com valor zero desativa o encerramento da conexão.
ClientAliveInterval
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 pelo canal criptografado para solicitar uma resposta do cliente. O padrão é 0, indicando que essas mensagens não serão enviadas ao cliente.
Existem vários métodos de autenticação no ssh com os quais você pode se conectar a um servidor linux remoto com ou sem senha, dependendo de sua necessidade. Você pode por exemplo usar autenticação baseada em hosts, antes de desconectar sessões ssh ociosas aprenda sobre esse método de autenticação usando o ssh.
Desconectar sessões SSH ociosa
Para desconectar sessões SSH ociosas, ou seja, fechar a conexão inativa com o programa cliente ssh após algum tempo sem respostas, certifique-se de que a opção ClientAliveCountMax seja diferente de 0 (zero) no arquivo /etc/ssh/sshd_config do servidor. Ao usar o valor 0 (zero), o sshd desativa o encerramento da conexão e da sessão ssh independentemente do valor configurado na opção com ClientAliveInterval.
Edite o arquivo /etc/ssh/sshd_config e inclua dentro do arquivo, as opções ClientAliveCountMax e ClientAliveInerval. O valor de cada uma dessas opções é um número, que indica a quantidade de segundos, ou, pode-se incluir a letra “m”( de maçã ) após o número para se referir a minutos.
No exemplo da configuração abaixo quero encerrar a conexão e a sessão ssh com clientes que estão ociosos ( inativos ) à mais de vinte minutos:
ClientAliveCountMax 1
ClientAliveInerval 20m
Após salvar as alterações basta reiniciar a unit ssh.service no servidor:
systemctl restart ssh.service
Feita a alteração, a partir de agora toda nova sessão ssh que esta ociosa(conexão inativa) será desconectada após o tempo informado.
Testando se sessão ociosa(conexão inativa) está sendo desconectada
Para exemplificar, nesse artigo o servidor tem o IP 192.168.1.39 e o PID do processo ssh (programa cliente) é o 18405.
ssh [email protected]
[email protected]'s password:
Abra um novo terminal no cliente e envie o sinal 19(SIGSTOP) usando o comando kill para o PID do processo ssh, no exemplo do artigo é o PID de número 18405, para congelar o processo ssh, assim o cliente ssh não irá responder ao servidor e a conexão vai ficar inativa:
kill -19 18405
Na prática o que vai acontecer é: Após vinte minutos o servidor(192.168.1.39) vai enviar uma mensagem para o cliente, para saber se está “vivo”, com a conexão ativa. se o cliente não responder(exemplo conexão caiu), no exemplo desse artigo o programa cliente ssh não vai responder por que está congelado.
O limite de “1” definido na opção ClientAliveCountMax vai ser excedido, e se o cliente continuar sem responder o servidor após mais vinte minutos, o servidor vai encerar a sessão ssh e desconectar o cliente.