我想通过脚本重启 Linux。脚本无法以 root 身份运行。
使用sudo reboot
产品
sudo:抱歉,您必须有一个 tty 才能运行 sudo。
一个简单的reboot
错误
需要 root 权限
我知道我可以编辑我的sudoers文件,但是有没有更简单的方法?
答案1
亚马逊为所有这些类型的功能提供了一个库,以便它们可以在 EC2 级别执行,而无需借助虚拟机本身的糟糕想法。
您可以使用ec2-reboot-instances instance_id
请求 EC2 重启任何实例,包括其自身。实例可以使用以下任一方式获取其自己的 ID:
curl -s http://169.254.169.254/latest/meta-data/instance-id
或者
ec2-metadata -i
因此,作为命令行上的一行程序,您可以使用以下命令:
ec2-reboot-instances -O YOURAWSKEY -W YOURAWSSECRET --region=YOURREGION $(ec2-metadata -i |cut -d':' -f 2)
EC2 功能的完整列表如下这里。
答案2
出于安全原因reboot
,halt
和shutdown
命令通常需要 root 权限 [1]
在谷歌上写,how to run sudo in a script
它回答
将您的脚本添加到具有 NOPASSWD 属性的 /etc/sudoers 文件中,以便允许它在不提示输入密码的情况下运行。您可以将其绑定到特定用户(或一组用户),或允许系统上的任何人使用 sudo 运行它。
如果你能reboot
将上述内容限制为仅启动命令的一行脚本。但是,这将导致您的计算机无需密码即可重新启动脚本+用户配置。
否则,您将面临每个人都有可能重新启动您的机器的风险。阅读答案 [2,4,5] 例如
... 你需要添加 suid 位[3,4,5] 到这些命令。但请注意,系统上有权访问 shell 的每个人都可以关闭您的机器。
但我也相信到使用 suid这是个坏主意在[
的评论中2] 再次建议用 visudo 修改……
%sudo ALL = NOPASSWD: /sbin/reboot
但此时最好这样做一行脚本即可重启为您的用户设置重启功能,并限制该用户只有重启功能。(因此,如果没有该脚本,即使以没有密码的用户身份也无法重启)。