如何解决Ansible Shell模块执行脚本时未切换至指定用户的问题
解决Ansible Shell模块未切换到指定用户执行脚本的问题
这个问题我之前也碰到过,大概率是你忽略了一个关键配置——Ansible的become_user只有在**启用become: yes**的时候才会生效!默认情况下become是关闭的,所以即使你指定了become_user: someuser,Ansible还是会用你的登录用户来运行脚本。
最直接的解决方案:启用become模式
修改你的playbook,加上become: yes配置,确保Ansible切换到目标用户执行操作:
- name: Execute script as someuser become: yes # 必须开启这个才能触发用户切换 become_user: someuser shell: cmd: "./script.ksh" chdir: "/path/to/script"
其他可能的排查点
如果加上become: yes还是不行,可以检查这几个地方:
- 确认执行Ansible的用户有切换到
someuser的权限(比如是否在sudoers里配置了无密码切换) - 检查
/path/to/script目录和script.ksh脚本的权限,确保someuser有读和执行的权限 - 查看脚本内部是否有硬编码的用户切换命令(比如
su/sudo切回原用户),如果有的话需要修改脚本逻辑
备选方案:用su命令直接指定用户执行
如果因为某些原因无法使用Ansible的become机制,也可以在shell命令里直接用su切换用户执行脚本:
- name: Execute script as someuser via su shell: cmd: 'su - someuser -c "./script.ksh"' chdir: "/path/to/script"
注意:这种方式需要当前用户能无密码切换到
someuser,否则会因为需要输入密码而执行失败。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

