我正在reboot -f远程使用该命令来强制重新启动 Unix 机器。问题是 ssh 连接长时间保持活动状态,我不知道为什么?我想在重新启动机器后立即关闭 ssh 连接并返回到我的本地 shell。我怎样才能做到这一点?请注意,没有-f标志的重启命令不起作用。
Gil*_*il' 22
该命令reboot -f永远不会返回(除非您无权导致重新启动)。在发出时,SSH 客户端正在等待执行某些操作,这可能是:
由于 SSH 服务器进程已死,SSH 客户端不会死,直到计时器启动。
如果你运行ssh remotehost 'reboot -f >/dev/null &',那么会发生什么:
reboot在后台启动命令。reboot命令会导致机器重新启动。然而,这并不可靠:根据时间的不同,第 3 步可能会在第 2 步之前发生。添加一个计时器使得这不太可能:
ssh remotehost '{ sleep 1; reboot -f; } >/dev/null &'
Run Code Online (Sandbox Code Playgroud)
为了绝对确定服务器端已承诺运行reboot,同时确保在通知客户端它已提交之前它实际上不会重新启动,您需要一个额外的通知从服务器到客户端。这可以通过 SSH 连接输出,但它变得复杂。
Rom*_*jev 11
我发现这个解决方案最适合我。
-o "ServerAliveInterval 2"与您的ssh命令一起使用,如下所示:
$ ssh -o "ServerAliveInterval 2" root@remotehost reboot
Run Code Online (Sandbox Code Playgroud)
所述选项使客户端每 2 秒通过安全通道戳服务器。最终随着重新启动的进行,它将停止响应并且客户端将断开连接。
小智 7
有些答案很接近,但正确的答案是:
ssh user@192.168.0.130 "nohup sudo reboot &>/dev/null & exit"
Run Code Online (Sandbox Code Playgroud)
解释:
exit作为最后一个命令,因此最后一个命令的状态为 0(成功)。如果你愿意,你可以预先准备一个睡眠,但这不是必需的stdin和stdout仍然通过 SSH 连接到虚拟终端,所以连接不会被关闭。您需要为 SSH 会话做两件额外的事情来结束并让命令在后台运行。
stdout和stderr到,/dev/null因此它们不会被保存 SSH 会话的虚拟终端重定向。这是&>/dev/null部分。stdin相同的方式重定向到不可读的文件。这就是 shell 内置nohup函数的作用。仅在后台运行的命令以各种方式与终端分离,exit将关闭会话,并且由于虚拟终端上没有stdin或stdout剩余,SSH 将终止连接而不会出错。
| 归档时间: |
|
| 查看次数: |
34173 次 |
| 最近记录: |