Ves*_*per 16 debian ssh systemd
我有一台运行 Debian 和 sshd 的服务器,如果我需要重新启动服务器,我的 SSH 会话会在客户端挂起,直到 TCP 超时。我认为这是因为在sshd
终止时它没有明确关闭与主机的打开的 SSH 会话。我应该怎么做才能让sshd
所有人先断开连接,然后正常终止?到目前为止,我没有看到man sshd_config
与关闭行为相关的参数。
n.s*_*.st 35
当您关闭或重新启动系统时,systemd
尝试尽快停止所有服务。这涉及关闭网络并终止所有仍处于活动状态的进程——通常按此顺序。因此,当 systemd 杀死正在处理您的 SSH 会话的分叉 SSH 进程时,网络连接已经被禁用,它们无法正常关闭客户端连接。
您的第一个想法可能是在关闭期间作为第一步终止所有 SSH 进程,并且有很多 systemd 服务文件可以做到这一点。
但是当然有一个更简洁的解决方案(如何“应该”完成):systemd-logind
.
systemd-logind
跟踪活动用户会话(本地和 SSH 会话)并将其中产生的所有进程分配给所谓的“切片”。这样,当系统关闭时,systemd 可以只对用户切片内的所有内容(包括处理特定会话的分叉 SSH 进程)发出 SIGTERM 信号,然后继续关闭服务和网络。
systemd-logind
需要一个 PAM 模块来获得新用户会话的通知,你需要dbus
使用它loginctl
来检查它的状态,所以安装这两个:
apt-get install libpam-systemd dbus
Run Code Online (Sandbox Code Playgroud)
确保您/etc/ssh/sshd_config
实际上将使用带有UsePAM yes
.
Jen*_*y D 10
这是您需要在客户端而不是服务器端设置的内容。编辑你~/.ssh/config
的包含
ServerAliveInterval 15
ServerAliveCountMax 5
Run Code Online (Sandbox Code Playgroud)
这意味着在 15 秒不活动后,您的客户端将向服务器发送一条消息。如果它没有得到任何响应,它会重试最多 5 次,当它仍然没有得到响应时,它会关闭会话。
此行为在此Debian Bug上报告,您只需要正确设置软件包附带的关闭脚本,因为默认情况下它们不会自动复制:
cp /usr/share/doc/openssh-client/examples/ssh-session-cleanup.service /etc/systemd/system/
systemctl enable ssh-session-cleanup.service
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
21233 次 |
最近记录: |