从脚本重新启动EC2 Amazon Linux(基于Redhat)


4

我想从脚本重启Linux。该脚本不以root身份运行。

运用 sudo reboot 产生

sudo:对不起,你必须有一个tty来运行sudo。

平原 reboot 给出了错误

需要成为root用户

我知道我可以编辑我的 sudoers文件 文件,但有更简单的方法吗?


你的意思是你想以root身份运行脚本吗?因为如果你用脚本启动脚本 sudo /bin/bash myscript.sh 它将以root身份运行。
Hastur

@Hastur我怎么能以root身份运行?如果可能的话可行。
Joshua Fox

命令 sudo /bin/bash 例如,以root身份启动bash shell。从那时起,你就是根。 避免它并设置仅限于单个脚本和相关用户的sudo权限更好(==更安全) 。要以root身份运行脚本,您可以执行此操作 sudo /bin/bash myscript.sh。但是,我刚刚对你说过吗? 最好为重启一行脚本设置sudo权限 。脚本通常会以您能想象的更多方式失败。所以它比失败更好,它不会像root一样:-)想象一下失败的道路 DelDir=/ 和a rm -rf ${DelDir}/*
Hastur

Answers:


2

亚马逊为所有这些类型的功能提供了一个库,以便它们可以在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功能的完整列表是 这里


谢谢!这对我行得通。对于那些阅读此内容的人:请注意,即使您拥有了instanceid,也必须指定或配置区域和凭据。所以,你的命令行看起来像ec2-reboot-instances -O YOURAWSKEY -W YOURAWSSECRET --region = us-west-2 $(ec2-metadata -i | cut -d':' - f 2)
Joshua Fox

@Joshua Fox善于侦探工作。我忘记了,我似乎记得我曾经 凭据和区域设置为环境变量 ,但我还没有任何EC2实例启动和运行一段时间。我需要在我的答案中包含你的评论,以使其完整并提供一个单行,但我应该先测试它。
Mark Ch

我加载了一个ec2实例,我无法使用环境变量方法,所以我只是简单地将命令行复制到答案中。
Mark Ch

1

reboothaltshutdown 出于安全原因,命令通常需要root [ 1 ]。
在谷歌上写 how to run sudo in a script 它回答

使用NOPASSWD属性将脚本添加到/ etc / sudoers文件中,以便允许它在不提示输入密码的情况下运行。您可以将其绑定到特定用户(或一组用户),或允许系统上的任何人使用sudo运行它。

如果可以的话,足够公平 将上述内容限制为仅启动的一行脚本 reboot 命令 。但是,这会使您的计算机在没有密码的情况下重新启动 脚本+用户 组态。

替代方案会让您面临每个人都有可能重启机器的风险。阅读答案[ 2 4 ] 例如

... 你需要 添加suid-Bit [ 3 4 对那些命令。但请注意,系统中有权访问shell的每个人都可以关闭您的计算机。

但我也深信这一点 使用suid 这是一个坏主意
在[评论]中 2 ]再次建议用visudo修改......

%sudo ALL = NOPASSWD: /sbin/reboot 

但在这一点上,最好这样做 重启的一行脚本 为您的用户,并限制只有重新启动功能。 (因此,如果您的用户没有密码,即使不使用该脚本,也无法重启)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.