Ansible使用become_user报sudo密码错误,但仅用become可正常运行
Ansible切换用户执行Git克隆时sudo密码错误问题
问题现象
- 不带
become_user的Playbook可正常执行:
--- - name: Clone rbenv become: yes git: repo: 'https://github.com/rbenv/rbenv.git' dest: /home/mastodon/.rbenv
- 添加
become_user: mastodon后执行失败,报错:FAILED! => {"msg": "Incorrect sudo password"},对应的Playbook:
--- - name: Clone rbenv become: yes become_user: mastodon git: repo: 'https://github.com/rbenv/rbenv.git' dest: /home/mastodon/.rbenv
环境信息
- Ansible版本:2.15.3
- 操作系统:OpenSUSE
- 已将
ansible_become_pass设置为ansible用户的sudo密码 - 尝试过调整
ansible_method、ansible_exe参数,问题未解决
解决办法
1. 调整sudoers权限配置
OpenSUSE默认sudo规则可能限制了ansible用户切换到mastodon用户的权限,需要给执行用户开权限。用visudo编辑sudoers文件:
visudo
添加以下规则(替换ansible为你的实际执行用户):
ansible ALL=(mastodon) NOPASSWD: ALL
如果需要限制命令范围,仅开放git相关权限也可以:
ansible ALL=(mastodon) NOPASSWD: /usr/bin/git
2. 切换成su方式提权
在OpenSUSE环境中,从普通用户切换到另一个普通用户时,默认可能需要目标用户的密码而非当前用户的sudo密码。可以修改become_method为su,并指定mastodon用户的密码:
--- - name: Clone rbenv become: yes become_method: su become_user: mastodon become_pass: "{{ mastodon_user_password }}" git: repo: 'https://github.com/rbenv/rbenv.git' dest: /home/mastodon/.rbenv
注意:密码不要明文写入,建议存储在Ansible Vault中保障安全。
3. 先克隆再修改目录权限(替代方案)
如果不想纠结用户切换的权限问题,可以先以root身份完成克隆,再将目录权限修改为mastodon用户所有:
--- - name: Clone rbenv as root become: yes git: repo: 'https://github.com/rbenv/rbenv.git' dest: /home/mastodon/.rbenv - name: Fix rbenv directory ownership become: yes file: path: /home/mastodon/.rbenv owner: mastodon group: mastodon recurse: yes
内容的提问来源于stack exchange,提问作者dagmatto
相关产品推荐
相关产品推荐

