重新启动或关闭无头服务器时,ssh 连接会立即断开。
有时服务器需要几个小时才能重新启动或关闭。由于它是无头的,我所能做的就是等待。
我是否可以尽可能长时间保持 ssh 连接打开,以便我知道发生了什么?
答案1
如果您查看 systemd 单元定义/lib/systemd/system/ssh.service
(在 的输出行中轻松找到您的发行版的名称systemctl status ssh
),它很可能会WantedBy=multi-user.target
在末尾(Install
部分)说明。
这意味着当这个“目标”不再存在时,它所需的所有服务都应该消失(停止)。目标通常充当保护伞,在运行时生命周期的某个时刻根据需要启动服务,并在不再需要时停止它们。关闭/重启活动禁用multi-user.target
和启用shutdown.target
(一些发行版还定义reboot.target
、poweroff.target
等)。
您可以添加一个临时服务配置(因此它是本地维护的并且不会与包装更新冲突),如下所示:
:; mkdir /etc/systemd/system/ssh.service.d
:; cat > /etc/systemd/system/ssh.service.d/shutdown.conf <<EOF
[Unit]
# Clear the list (remove default shutdown.target from it)
#Conflicts=
DefaultDependencies=no
[Install]
WantedBy=shutdown.target
# emergency.target rescue.target
EOF
# Update systemd runtime knowledge
:; systemctl daemon-reload
# Resync symlinks which are what matters for boots
:; systemctl enable ssh
为了更好的衡量,您可能希望将其添加emergency.target rescue.target
到列表中,但请记住,这可能会sshd
在非根主目录不可用时运行。
验证方式:
:; systemctl show -p WantedBy,Conflicts ssh
:; systemd-delta --type=extended
这样只要 IP 寻址可用,您的 ssh 连接就可以保持运行networking.service
(当所有依赖它的人都被停止时,它就会消失,通常是在生命周期的很晚的时候)。