使用ansible

时间:2016-07-08 17:09:14

标签: ansible ansible-playbook ansible-2.x

我正在运行一个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

对我可能做错了什么的想法?

2 个答案:

答案 0 :(得分:5)

在' sudo su - root' root权限是sudo而不是su获得的(这就是为什么后者不会要求root密码,因为它已经由root用户角色中的进程调用)。

但是,在您的设置中,您指定了become_method: su,该密码需要root密码。

因此修复方法是将become_method更改为sudo(或者,如果您知道root用户的密码,请输入该密码而不是用户的密码)。

答案 1 :(得分:5)

sudo su - rootbecome_method: su不同。

su尝试切换到另一个用户(默认情况下为root),并要求您进行身份验证(即输入密码)。 sudo类似,只是提示您的密码。为了防止这种情况成为安全群集,sudo仅适用于已通过/etc/sudoers明确授予其访问权限的用户。

当您使用sudo su - root时,您说:

  1. 通过sudo将我的权限提升为root。
  2. 使用这些提升的权限,切换到root用户帐户。
  3. 现在,当您在Ansible中指定become_method: su时,您告诉Ansible使用su 而不是 sudo。实际命令会有所不同,但您可以将其视为运行命令su - root。看看有什么不同?

    您应该使用become_method: sudo,或者完全删除它,因为这是默认设置。