У меня есть сервер, на котором запущены Debian и sshd, и в случае, если мне нужно перезагрузить сервер, мой SSH-сеанс зависает на стороне клиента до истечения времени ожидания TCP. Я предполагаю, что это потому, что когда sshd
он завершается, он явно не закрывает открытые сеансы SSH с хостом. Что я должен сделать, чтобы sshd
сначала отключить всех, а затем завершить себя как обычно? Пока что я не вижу параметра, man sshd_config
который связан с поведением выключения.
13
Ответы:
Когда вы выключаете или перезагружаете свою систему,
systemd
пытаетесь остановить все службы настолько быстро, насколько это возможно. Это включает в себя отключение сети и завершение всех процессов, которые еще живы - обычно в таком порядке. Поэтому, когда systemd убивает разветвленные процессы SSH, которые обрабатывают ваши сеансы SSH, сетевое соединение уже отключено, и у них нет возможности изящно закрыть клиентское соединение.Ваша первая мысль может состоять в том, чтобы просто завершить все процессы SSH в качестве первого шага во время выключения, и существует довольно много системных служебных файлов, которые делают именно это.
Но, конечно, есть более точное решение (как это должно быть сделано)
systemd-logind
.systemd-logind
отслеживает активные пользовательские сессии (локальные и SSH) и назначает все процессы, порожденные в них, так называемым «срезами». Таким образом, когда система выключается, systemd может просто SIGTERM все внутри пользовательских срезов (что включает в себя разветвленный процесс SSH, который передает определенный сеанс), а затем продолжать закрывать службы и сеть.systemd-logind
требуется модуль PAM для получения уведомлений о новых сеансах пользователя, и вам необходимоdbus
использовать егоloginctl
для проверки его состояния, поэтому установите оба из них:Убедитесь, что на
/etc/ssh/sshd_config
самом деле вы собираетесь использовать модуль сUsePAM yes
.источник
reboot
выполните a,shutdown -r
которое по умолчанию имеет задержку в 1 минуту, оставляя вам время для закрытия сеанса SSH.Это то, что вам нужно установить на стороне клиента, а не на стороне сервера. Изменить ваш,
~/.ssh/config
чтобы содержатьЭто означает, что после 15 секунд бездействия ваш клиент отправит сообщение на сервер. Если он не получит никакого ответа, он попытается снова до 5 раз, а когда он все еще не получит ответа, он закроет сеанс.
источник
О таком поведении сообщается об этой ошибке Debian : вам нужно только правильно настроить сценарии завершения работы, поставляемые с пакетом, потому что автоматически они не копируются по умолчанию:
источник
Вы можете указать параметры, о которых говорила Дженни Д. в своем ответе, только для одной команды ssh, например:
если вы делаете это часто, вы можете написать это.
источник
У меня работает с lshd. Таким образом, решение будет
источник
к сожалению serverfault не позволил мне ответить по причине потока слишком мало пунктов с годами. Но мне не нужно спамить в других блогах, чтобы получить разблокировку ^^ ... так что выделенный ответ:
Как сказал Рфрейл
работает. Чтобы использовать его без перезагрузки экземпляра / сервера, вы должны выполнить дополнительные задачи:
поэтому служба зарегистрирована и запущена, и systemd необходимо остановить ее для перезагрузки / выключения.
источник