我需要能够以用户身份停止 aws EC2 服务器。我发现https://www.cyberciti.biz/tips/howto-linux-allow-users-to-shutdown-server.html但由于我需要在 aws EC2 实例上使用此功能,所以我没有静态主机名,所以我尝试:
ubuntu ALL=(ALL:ALL) ALL=/sbin/halt /sbin/reboot
但这让我:
>>> /etc/sudoers: syntax error near line 21 <<<
What now?
Options are:
(e)dit sudoers file again
e(x)it without saving changes to sudoers file
(Q)uit and save changes to sudoers file (DANGER!)
我怎样才能正确解决这个问题?
答案1
我想您正在寻找:
ubuntu ALL=/sbin/halt, /sbin/reboot
这与:
ubuntu ALL=(ALL:ALL) /sbin/halt, /sbin/reboot
一般来说,您应该始终使用visudo
来编辑您的sudoers
配置,因为它会在将文件放置到最终位置之前对其执行语法检查。
请参阅sudoers(5)
手册页以获取完整的文档,包括一长串记录示例。
如果您的问题是“我如何从这种情况中恢复”,如果您无法直接登录root
,那么您最好的选择可能是删除 EC2 实例并创建一个新实例。
答案2
如果您正在使用AWS CLI作为用户,您可以执行以下操作(在实例本身上):
aws ec2 reboot-instances --instance-ids $(curl -s http://instance-data/latest/meta-data/instance-id)
看到这个讨论从实例本身获取 EC2 ID。
如果您想在运行之前测试一下是否具有所需的权限,请尝试包含以下--dry-run
标志:
--空运行 | --no-dry-run(布尔值)
检查您是否拥有该操作所需的权限,而无需实际发出请求,并提供错误响应。如果您拥有所需的权限,则错误响应为 DryRunOperation 。否则,它是 UnauthorizedOperation 。
有关上下文,请参阅此讨论halt
关于、shutdown
、reboot
等之间的区别