我已经设置了一台用于深度学习的远程机器 - ubuntu 16.04、anaconda 3、jupyter notebook 等。我已经设置了带有端口转发、强密钥、无密码的 openssh,一切运行良好。
在会话之间,我希望能够让我的机器休眠/挂起。我的理解是 16.04 现在使用systemd来管理这种行为,这sudo systemctl suspend
就是我应该用来让它进入睡眠状态的命令。我试过了,它有效,是的!
如果我通过 SSH 会话让机器进入睡眠状态,那么我的笔记本电脑上的终端就会锁定,因为另一端现在处于睡眠状态。我不知道这是否会导致问题,但我觉得不太好。
如果我先注销我的 ssh 会话,那么我就无法挂起机器,因为我没有授权。
我想创建一个小脚本,让我可以注销然后挂起机器。
我做了一些研究,在谷歌上找到的大多数内容都是“如何退出 ssh 并保持会话处于活动状态”,所以我还没有找到正确的术语。此外,我确实找到了一些与 dbus 或启动有关的内容,但没有找到与 systemd 相关的具体内容。我认识的一个人建议了以下方法,但没有奏效。它注销了我,但机器没有挂起/睡眠/休眠。
logout && sleep 2 && sudo systemctl suspend
我不确定是不是因为我需要以 sudo 身份进行身份验证,还是因为注销终止了短路评估。
所以我正在寻找一个可以运行的脚本,它将执行以下操作(只要整个过程有效,顺序对我来说并不重要)。
- 确保我已通过 sudo 身份验证(如果需要 sudo)
- 退出我的 ssh 会话
- 使机器进入挂起状态
或者我在想也许有一种方法可以注销然后在我的本地机器上运行脚本来暂停?
答案1
您是否考虑过结束 ssh 会话,然后通过 ssh 执行挂起命令,而不是打开一个全新的会话?
ssh -t user@host sudo systemctl suspend
这应该能满足您的要求。否则,您可以将其设置为无密码 sudo,但您应该仔细考虑这样做的安全隐患。
可以参考以下一些资料来了解如何设置:
https://stackoverflow.com/questions/10310299/proper-way-to-sudo-over-ssh?noredirect=1&lq=1
https://stackoverflow.com/a/4627834
编辑:
此外,如果您想要一些更安全(我相信)的无密码方式,您可以为此添加 sudoers 条目。例如,suspend-nosudo
在目录中创建一个名为的文件,/etc/sudoers.d
内容为:
# Allow yourusername user to suspend without sudo
yourusername ALL=(ALL) NOPASSWD: /usr/bin/systemctl suspend
当然yourusername
是你的用户名。然后如果你
ssh -t user@host sudo systemctl suspend
您不会收到密码提示。