我很好奇执行 python 程序的最佳方法(最安全的方法)以及在程序结束后关闭系统(在 ssh 会话中使用 sudo )。
我最初要做的是:
nohup python py_name.py && sudo shutdown -h now &
或者
nohup python py_name.py ; sudo shutdown -h now &
(sudo
因为我处于 ssh 会话中,没有它我就无法关闭,并且nohup
因为&
我想在执行后离开系统)
问题是 python 程序大约需要 5-8 小时长,我不希望之后出现 pw 的 shell 提示(在执行第一个命令时是否有可能提示?)。我的系统是 ubuntu 18.04,所以我猜想“sudoing”都无法工作,因为 sudo 超时(15 分钟?)。
一种选择是进入两个命令的超级用户模式或编写脚本并执行sudo ./script
,但考虑到它正在执行 python 程序,它安全吗? (这是一个简单的家庭电脑设置,所以也许这不是问题)
还有其他我不知道的方法吗?
- - - 编辑 - - -
我试着跑sudo sh -c 'python py_name.py && sudo shutdown -h now'
。sudo sh -c 'command'
执行另一个 shell 来运行命令,它可以这样工作,因为所有 shell 都在 sudo 中。问题是我使用 python 环境,并且这个新 shell 没有随它一起激活。
- - -解决方案 - - -
真正的解决方案如上所述(通过解决方案),更改 sudoers 文件sudo visudo
以将 shutdown 添加到运行时不需要密码的列表中sudo shutdown
。每个 sudoers 文件都是不同的,但就我而言,我需要添加my_username ALL=(ALL) NOPASSWD: /sbin/shutdown
,其中第一个“空格”是制表符,并且/sbin/shutdown
是您要执行的命令的路径(您可以使用 检查路径command -v shutdown
)。
答案1
您可以在 /etc/sudoers 文件中为此用户设置无密码 sudo。例如在 ssh 服务器上(当然也可以更严格,即只允许关闭无密码等):
你的用户 ALL = (ALL) NOPASSWD: ALL