Коли ви вимикаєте або перезавантажуєте систему, systemd
намагається зупинити всі сервіси якнайшвидше. Це передбачає зведення мережі та припинення всіх процесів, які ще живі - зазвичай у такому порядку. Отже, коли systemd вбиває роздвоєні процеси SSH, які обробляють ваші сеанси SSH, мережеве з'єднання вже відключено, і вони не мають можливості витончено закрити клієнтське з'єднання.
Вашою першою думкою може бути просто вбити всі SSH процеси як перший крок під час вимкнення, і там є досить багато системних файлів служб, які роблять саме це.
Але є, звичайно , рішення акуратним (як це «повинен» бути зроблено) systemd-logind
.
systemd-logind
відслідковує активні сеанси користувача (локальні та SSH) та призначає всі породжені в них процеси так званим "фрагментам". Таким чином, коли система вимикається, systemd може просто ЗІГНІТЬ все, що знаходиться всередині користувацьких фрагментів (що включає в себе роздвоєний SSH-процес, який передає певний сеанс), а потім продовжувати відключення служб та мережі.
systemd-logind
необхідний модуль PAM , щоб отримувати повідомлення про нові сеансах користувачів , і ви повинні будете dbus
використовувати , loginctl
щоб перевірити його стан, тому встановити обидва ці:
apt-get install libpam-systemd dbus
Будьте впевнені, що ви /etc/ssh/sshd_config
дійсно збираєтеся використовувати модуль UsePAM yes
.