在EC2上使用SSM以特定用户身份运行命令

74次阅读
没有评论

问题描述

想要通过AWS CLI和SSM自动配置EC2。容器的手动设置如下:
– 创建一个EC2实例
– 以root用户身份运行一个shell脚本
– 以特定用户身份运行一个shell脚本

用户想知道是否可以使用类似aws ssm send-command的工具在EC2上运行命令,并指定执行命令的Linux用户。如果命令是一个shell脚本,是否可以在脚本内部指定用户,比如使用sudo su my_user命令?

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

根据AWS和boto3文档,没有找到直接允许指定用户的方法。但是可以使用runuser命令以不同的用户身份执行命令。理论上,你也可以使用sudosu命令的组合来实现相同的效果,但runuser命令更简单。
具体操作如下:

runuser -l  userNameHere -c '/path/to/command arg1 arg2'

由于send-command是以root用户身份执行的,所以不会有任何问题。

请注意,我曾以为send-command在某种程度上使用了由SSM Session Manager管理的会话,但我错了。我花了很多时间配置SSM Session Manager的首选项,并根据文档和教程标记了IAM资源,但据我所见,send-command始终以root用户身份执行。

参考资料:
https://man7.org/linux/man-pages/man1/runuser.1.html
https://www.cyberciti.biz/open-source/command-line-hacks/linux-run-command-as-different-user/

方案2

使用su - username命令切换用户时,如果无法从root用户切换到其他用户,可以尝试使用su -l username命令。

如果方案1中的runuser命令无法使用,你可以尝试使用su - username命令切换用户。这个命令会以指定用户的身份启动一个新的shell,并且会加载该用户的环境变量和配置文件。以下是使用su - username命令的示例:

su - username -c '/path/to/command arg1 arg2'

请注意,su - username命令需要输入目标用户的密码。如果你无法从root用户切换到其他用户,可能需要检查目标用户的密码是否正确。

感谢评论中的用户提供的信息,这对于在_AWS Systems Manager – Run Command_中执行脚本时无法从root用户切换用户的情况也很有帮助。

总结

在EC2上使用SSM以特定用户身份运行命令,可以使用runuser命令或su - username命令。这些命令允许你以指定用户的身份执行命令。请根据你的需求选择适合的方法。

请注意,send-command始终以root用户身份执行,无法直接指定其他用户。如果你需要在EC2上以不同用户身份执行命令,可以尝试使用上述方法。

希望这些信息对你有帮助!

正文完