我想这个问题与如何配置 dbus 以允许 ssh-user 暂停服务器几乎相同?; 除了我想更好地制定它。
假设我有一个不间断运行的 Ubuntu 服务器,我们称之为MyServer
. 那么,假设我在同一本地网络上有另一台 PC MyServer
,我们称之为MyLocalPC
。
MyLocalPC
wakeonlan
然后保持挂起,除非它通过by打开MyServer
。该过程的这一部分对我来说非常有效:我可以通过ssh
to登录MyServer
,在MyServer
ssh 提示符上我可以发出wakeonlan
,然后MyLocalPC
醒来 - 太好了。
但是,一旦我完成了与 的合作MyLocalPC
,我想再次将其置于暂停状态。问题如下 - 如果我MyLocalPC
首先通过ssh 进入,我可以轻松地将机器挂起ssh
:
[MyServer]$ ssh MyLocalPC
[MyLocalPC]$ dbus-send --session --dest=org.freedesktop.PowerManagement --type=method_call --print-reply --reply-timeout=2000 /org/freedesktop/PowerManagement org.freedesktop.PowerManagement.Suspend
这将暂停MyLocalPC
- 但也会正确阻止退出ssh
,并最终冻结。我试图变得棘手并发出这样的问题:ssh
MyServer
[MyServer]$ ssh MyLocalPC "dbus-send --session --dest=org.freedesktop.PowerManagement --type=method_call --print-reply --reply-timeout=2000 /org/freedesktop/PowerManagement org.freedesktop.PowerManagement.Suspend"
Failed to open connection to "session" message bus: /bin/dbus-launch terminated abnormally with the following error: Autolaunch error: X11 initialization failed.
然后我读到DISPLAY
了应该定义变量的地方——但这也失败了:
[MyServer]$ ssh MyLocalPC "DISPLAY=:0 dbus-send --session --dest=org.freedesktop.PowerManagement --type=method_call --print-reply --reply-timeout=2000 /org/freedesktop/PowerManagement org.freedesktop.PowerManagement.Suspend"
Error org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.PowerManagement was not provided by any .service files
那么有谁知道我如何在MyLocalPC
没有与冻结ssh
连接的情况下发出暂停MyServer
?
只需键入
<enter>~&
(即三个击键:回车、squggle、& 号),ssh 将进入后台,并最终自行超时。如果您只想在这种情况下放弃交互式会话,那很好。或者,或者,将其放入 MyLocalPC 上的 shell 脚本中,并以后台连接的方式进行连接:
对我来说最简单的是使用
at
命令:然后断开 SSH 会话。
您需要使用 启用 X11 转发
ssh -Y
。或者,使用at now + 2 minutes
仅运行一次命令(man at
有关更多信息,请参阅)。将 cron 作业设置为未来 2 分钟并断开连接
我知道这是一个非常古老的问题,但是在 Ubuntu 22.04 上,我一直在使用
sudo systemctl suspend && exit
暂停机器并立即退出 SSH 连接。
ssh 锁定时如何摆脱它? 有许多有效的解决方案。poolie提到了一个;我在我的系统上设置了一个保持活动超时,它将通过添加以下内容来自动暂停挂起的 SSH 会话
~/.ssh/config
:挂起远程机器后也可以工作。