我正在运行一个ansible playbook作为sudo用户(强制sudo密码) - 但是,我得到一个回复,说明su密码不正确,即使我可以在远程服务器上执行以下操作(使用相同的密码我尝试过ansible):
sudo su - root
错误消息
fatal: [testserver]: FAILED! => {"failed": true, "msg": "Incorrect su password"}
主机
[webservers]
testserver ansible_ssh_host=ec2-52-87-166-241.compute-1.amazonaws.com ansible_ssh_port=9876
ansible命令
ansible-playbook test_playbook.yml -i hosts --ask-become-pass -vvv
test_playbook
---
- hosts: all
gather_facts: no
remote_user: testuser
become: yes
become_method: su
become_user: root
any_errors_fatal: true
tasks:
- group:
name: devops
state: present
- name: create devops user with admin privileges
user:
name: devops
comment: "Devops User"
uid: 2001
groups: devops
对我可能做错了什么的想法?
答案 0 :(得分:5)
在' sudo su - root
' root权限是sudo
而不是su
获得的(这就是为什么后者不会要求root密码,因为它已经由root用户角色中的进程调用)。
但是,在您的设置中,您指定了become_method: su
,该密码需要root密码。
因此修复方法是将become_method
更改为sudo
(或者,如果您知道root用户的密码,请输入该密码而不是用户的密码)。
答案 1 :(得分:5)
sudo su - root
与become_method: su
不同。
su
尝试切换到另一个用户(默认情况下为root),并要求您进行身份验证(即输入密码)。 sudo
类似,只是提示您的密码。为了防止这种情况成为安全群集,sudo
仅适用于已通过/etc/sudoers
明确授予其访问权限的用户。
当您使用sudo su - root
时,您说:
sudo
将我的权限提升为root。现在,当您在Ansible中指定become_method: su
时,您告诉Ansible使用su
而不是 sudo
。实际命令会有所不同,但您可以将其视为运行命令su - root
。看看有什么不同?
您应该使用become_method: sudo
,或者完全删除它,因为这是默认设置。