使用ansible的sudo用户不接受密码

password not being accepted for sudo user with ansible

我是 运行 作为 sudo 用户的 ansible 剧本(强制输入 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

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

在“sudo su - root”中,root 特权是由 sudo 而不是 su 获得的(这就是为什么后者不要求 root 密码,因为它被调用通过已经处于 root 用户角色的进程)。

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

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

sudo su - rootbecome_method: su 不同。

su 尝试切换到另一个用户(默认情况下为 root)并要求您以他们的身份进行身份验证(即输入他们的密码)。 sudo 类似,只是它会提示输入 您的 密码。为防止这成为安全灾难性问题,sudo 仅适用于已通过 /etc/sudoers.

明确授予访问权限的用户

当您使用 sudo su - root 时,您表示:

  1. 通过 sudo.
  2. 将我的权限提升为 root
  3. 使用这些提升的权限,切换到 root 用户帐户。

现在,当您在 Ansible 中指定 become_method: su 时,您是在告诉 Ansible 使用 su 而不是 sudo。实际命令会有所不同,但您可以将其视为 运行 命令 su - root。看看有什么不同?

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