如何保持 ssh 连接打开直到重启或关机的最后阶段?

如何保持 ssh 连接打开直到重启或关机的最后阶段?

重新启动或关闭无头服务器时,ssh 连接会立即断开。

有时服务器需要几个小时才能重新启动或关闭。由于它是无头的,我所能做的就是等待。

我是否可以尽可能长时间保持 ssh 连接打开,以便我知道发生了什么?

答案1

如果您查看 systemd 单元定义/lib/systemd/system/ssh.service(在 的输出行中轻松找到您的发行版的名称systemctl status ssh),它很可能会WantedBy=multi-user.target在末尾(Install部分)说明。

这意味着当这个“目标”不再存在时,它所需的所有服务都应该消失(停止)。目标通常充当保护伞,在运行时生命周期的某个时刻根据需要启动服务,并在不再需要时停止它们。关闭/重启活动禁用multi-user.target和启用shutdown.target(一些发行版还定义reboot.targetpoweroff.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(当所有依赖它的人都被停止时,它就会消失,通常是在生命周期的很晚的时候)。

相关内容