使用--ask-pass和--ask-become-pass运行Ansible Playbook遇权限问题求助
解决Ansible切换用户创建文件权限拒绝问题
问题根源
你当前的Ansible命令和Playbook默认会尝试用user1直接sudo到root,但远程主机仅配置了user2拥有免密sudo权限,user1并没有sudo到root的权限,因此触发权限拒绝。而你手动操作是先切换到user2再执行sudo,所以能成功。
具体解决方法
方法1:在Playbook中指定切换到user2后执行操作
修改create.yml,添加become_user和become配置,确保先切换到user2,再执行sudo操作:
- name: Create file in /root hosts: rhel8 remote_user: user1 become: yes become_user: user2 tasks: - name: Create /root/file2 via user2's sudo command: sudo touch /root/file2
执行命令时,--ask-pass输入user1的SSH密码,--ask-become-pass输入user2的切换密码(从user1切换到user2需要验证)。
方法2:命令行直接指定目标用户
无需修改Playbook,直接在命令行添加--become-user user2参数,强制Ansible切换到user2后执行任务:
ansible-playbook -i hosts -l rhel8 create.yml --ask-pass --ask-become-pass --become-user user2
方法3:全局配置默认切换用户
如果需要长期使用该配置,修改控制节点的ansible.cfg文件,添加以下内容:
[defaults] remote_user = user1 [privilege_escalation] become = yes become_user = user2 become_method = sudo
之后执行Playbook时,只需输入对应密码即可:
ansible-playbook -i hosts -l rhel8 create.yml --ask-pass --ask-become-pass
验证要点
- 确认
user1能正常切换到user2(比如远程主机执行su user2输入密码后可成功切换) - 验证
user2的免密sudo配置生效:远程主机用user2执行sudo touch /root/test,确认无需输入密码即可创建文件
内容的提问来源于stack exchange,提问作者Davide Papagno
相关产品推荐
相关产品推荐

