Ssh

SSH 會話在關機/重啟時掛起

  • May 7, 2019

我有一台執行 Debian 和 sshd 的伺服器,如果我需要重新啟動伺服器,我的 SSH 會話會在客戶端掛起,直到 TCP 超時。我認為這是因為當sshd被終止時,它沒有明確關閉與主機的打開的 SSH 會話。我應該怎麼做才能sshd首先斷開每個人,然後正常終止自己?到目前為止,我沒有看到man sshd_config與關閉行為相關的參數。

當您關閉或重新啟動系統時,請systemd盡可能快地停止所有服務。這涉及關閉網路並終止所有仍然存在的程序 - 通常按此順序。因此,當 systemd 殺死正在處理您的 SSH 會話的分叉 SSH 程序時,網路連接已經被禁用,它們無法正常關閉客戶端連接。

您的第一個想法可能是在關機期間首先殺死所有 SSH 程序,並且有相當多的 systemd 服務文件可以做到這一點。

但是當然有一個更簡潔的解決方案(“應該”如何完成):systemd-logind.

systemd-logind跟踪活動使用者會話(本地和 SSH 會話)並將其中產生的所有程序分配給所謂的“切片”。這樣,當系統關閉時,systemd 只需 SIGTERM 使用者片內的所有內容(包括處理特定會話的分叉 SSH 程序),然後繼續關閉服務和網路。

systemd-logind需要一個 PAM 模組來獲得新使用者會話的通知,您需要dbus使用loginctl它來檢查它的狀態,所以安裝這兩個:

apt-get install libpam-systemd dbus

確保您/etc/ssh/sshd_config實際上將模組與UsePAM yes.

引用自:https://serverfault.com/questions/706475