Quando você desliga ou reinicializa 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 vivos - geralmente nessa ordem. Então, quando o systemd mata os processos SSH bifurcados que estão manipulando suas sessões SSH, a conexão de rede já está desabilitada e eles não têm como fechar a conexão do cliente normalmente.
Seu primeiro pensamento pode ser simplesmente matar todos os processos SSH como o primeiro passo durante o desligamento, e existem alguns arquivos de serviço systemd que fazem exatamente isso.
Mas é claro que há uma solução mais simples (como é "suposto" ser feito): systemd-logind
.
systemd-logind
mantém o controle das sessões ativas do usuário (locais e SSH) e atribui todos os processos gerados dentro eles para chamados "fatias". Dessa forma, quando o sistema é desligado, o systemd pode apenas SIGTERM tudo dentro das fatias do usuário (que inclui o processo SSH bifurcado que está entregando uma sessão específica) e depois continuar a desligar os serviços e a rede.
systemd-logind
requer um módulo PAM para ser notificado sobre novas sessões de usuário e você precisará de dbus
para usar loginctl
para verificar seu status. Portanto, instale os dois:
apt-get install libpam-systemd dbus
Certifique-se de que seu /etc/ssh/sshd_config
, na verdade, usará o módulo com UsePAM yes
.