使用ssh命令执行重新启动后关闭连接

咖啡杯

我正在reboot -f远程使用命令来强制重新引导Unix计算机。问题是ssh连接长时间保持活动状态,我不知道为什么?我想在重启机器后立即关闭ssh连接,并返回到我的本地shell。我怎样才能做到这一点?请注意,不带-f标志的重新启动命令不起作用。

吉勒斯“别再邪恶了”

该命令将reboot -f永不返回(除非您没有导致重新引导的权限)。在发布时,SSH客户端正在等待做某事,这可能是:

  • SSH服务器通知客户端发生了需要引起注意的事情,例如,有一些输出要显示,或者远程命令已完成;
  • 客户端发生的一些事件,例如中继信号;
  • 触发计时器以使客户端发送保持活动消息(如果服务器未回复,则关闭连接)。

由于SSH服务器进程已死,因此SSH客户端将不会死,直到计时器启动。

如果您运行ssh remotehost 'reboot -f >/dev/null &',则将发生以下情况:

  1. 远程外壳程序将reboot在后台启动命令。
  2. 因为已经退出了服务器端shell命令,并且没有任何进程保持打开标准输出的文件描述符,所以SSH服务器关闭了连接。
  3. reboot命令使计算机重新引导。

但是,这并不可靠:根据时间的不同,第3步可能会在第2步之前进行。添加计时器会使这种情况不太可能发生:

ssh remotehost '{ sleep 1; reboot -f; } >/dev/null &'

要绝对确保服务器端已承诺运行reboot,同时确保在通知客户端已提交之前实际上并未重新引导,则需要从服务器到客户端的附加通知。可以通过SSH连接输出,但是变得很复杂。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章