Eu tenho um servidor que executa o Debian e o sshd e, no caso de precisar reiniciar o servidor, minha sessão SSH trava no lado do cliente até o tempo limite do TCP. Suponho que isso ocorre porque, quando sshd
está sendo encerrado, não fecha explicitamente as sessões SSH abertas para o host. O que devo fazer para sshd
primeiro desconectar todos e depois terminar normalmente? Até agora, não vejo um parâmetro man sshd_config
relacionado ao comportamento de desligamento.
13
Respostas:
Quando você encerra ou reinicia o sistema,
systemd
tenta interromper todos os serviços o mais rápido possível. Isso envolve derrubar a rede e encerrar todos os processos que ainda estão ativos - geralmente nessa ordem. Portanto, quando o systemd mata os processos SSH bifurcados que estão lidando com suas sessões SSH, a conexão de rede já está desativada e eles não têm como fechar a conexão do cliente normalmente.Seu primeiro pensamento pode ser matar todos os processos SSH como o primeiro passo durante o desligamento, e existem alguns arquivos de serviço do systemd por aí que fazem exatamente isso.
Mas é evidente que existe uma solução mais limpa (como ele é "suposto" ser feito):
systemd-logind
.systemd-logind
monitora as sessões de usuários ativos (locais e SSH) e atribui todos os processos gerados dentro deles às chamadas "fatias". Dessa forma, quando o sistema é desligado, o systemd pode simplesmente SIGTERM tudo dentro das fatias do usuário (que inclui o processo SSH bifurcado que está realizando uma sessão específica) e continuar desligando os serviços e a rede.systemd-logind
requer que um módulo PAM seja notificado sobre novas sessões de usuário e você precisarádbus
usarloginctl
para verificar seu status; portanto, instale ambas:Certifique-se de que você
/etc/ssh/sshd_config
realmente vai usar o móduloUsePAM yes
.fonte
reboot
, faça umshutdown -r
padrão com atraso de 1 minuto, deixando tempo para fechar a sessão SSH.Isso é algo que você precisa definir no lado do cliente, não no lado do servidor. Edite seu
~/.ssh/config
para conterIsso significa que, após 15 segundos de inatividade, seu cliente enviará uma mensagem ao servidor. Se não receber nenhuma resposta, tentará novamente até 5 vezes e, quando ainda não obtiver resposta, encerrará a sessão.
fonte
Esse comportamento é relatado neste bug da Debian . Você só precisa configurar corretamente os scripts de desligamento fornecidos com o pacote porque, automaticamente, eles não são copiados por padrão:
fonte
Você pode especificar as opções sobre as quais Jenny D falou em sua resposta apenas para um comando ssh, como
se você fizer isso com frequência, poderá criar um script.
fonte
Funciona para mim com o lshd. Então a solução seria
fonte
infelizmente serverfault não me deixou responder na causa do thread por muito poucos pontos desde anos. Mas não preciso enviar spam em outros blogs para obter o desbloqueio ^^ ... então, como resposta dedicada:
Como Rfraile mencionou
trabalho. Para usá-lo sem reiniciar a instância / servidor, você deve executar tarefas adicionais:
portanto, o serviço é registrado e iniciado e o systemd precisa interrompê-lo para fins de reinicialização / desligamento.
fonte