问题描述
想要通过AWS CLI和SSM自动配置EC2。容器的手动设置如下:
– 创建一个EC2实例
– 以root用户身份运行一个shell脚本
– 以特定用户身份运行一个shell脚本
用户想知道是否可以使用类似aws ssm send-command
的工具在EC2上运行命令,并指定执行命令的Linux用户。如果命令是一个shell脚本,是否可以在脚本内部指定用户,比如使用sudo su my_user
命令?
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
根据AWS和boto3文档,没有找到直接允许指定用户的方法。但是可以使用runuser
命令以不同的用户身份执行命令。理论上,你也可以使用sudo
和su
命令的组合来实现相同的效果,但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上以不同用户身份执行命令,可以尝试使用上述方法。
希望这些信息对你有帮助!