运行 Ansible 剧本中的角色时如何成为远程计算机的用户

How to become a user at remote machine when running a role in Ansible playbook

我知道这已在其他问题中讨论过,我尝试了各种选择,但似乎没有解决我的问题。

我开始学习 Ansible 并尝试 运行 剧本。我有一个角色,其中有任务。我想 运行 作为用户 john 在远程机器上的整个剧本。剧本以复制任务开始。一切正常,直到我开始使用 become 和 become_user。我尝试 运行通过在主要 playbbok 中指定来扮演用户 john 的角色:

---
- hosts: target-machine.com
   roles:
   - role: installSoftware
     become: yes
     become_user: john

然后在执行剧本时,我运行以下内容:

 ansible-playbook -s major.yml -K

提示我输入

SUDO password:

我输入远程目标机器上用户john的密码。一旦启动 运行ning 剧本,它就挂在需要用户为 john 的任务上并抱怨:

fatal: [target.com]: FAILED! => {"failed": true, "msg": "Failed to get information on remote file (/home/john/software.zip): MODULE FAILURE"}

我还尝试了以下方法:

---
- hosts: target-machine.com
  become: yes
  become_user: john
  roles:
   - role: installSoftware

以便 运行 用户 john 的整个剧本。它再次询问我 SUDO 密码,然后在 5 分钟后抱怨:

fatal: [openam.ansible-target.com]: FAILED! => {"changed": false, "failed":       true, "module_stderr": "", "module_stdout": "\r\nSorry, try again                           .\r\n[sudo via ansible, key=kchjtpjorgnvaksspqvgwzzkgtjnxsyv] password: \r\nsudo: 1 incorrect password attempt\r\n", "msg": "MODULE FAILURE"}

虽然我输入的密码是正确的。在 SO 上,建议增加我在 ansible.cfg 文件中所做的 SSH 超时:

 [ssh_connection]
 ssh_args = -o ServerAliveInterval=60 -o ControlMaster=auto -o ControlPersist=1m

我只想在目标机器上运行镜像:

   su john
   Enter Password:
   john$

如有任何帮助,我们将不胜感激。谢谢。

默认情况下,become 使用 sudo,而不是 su。因此,Ansible 提示您输入的密码是 您以 身份登录的用户的密码,而不是您要更改为的用户的密码。您可以将此 by setting become_method 更改为 su.

如果您希望始终 运行 作为不同用户在该主机上执行所有任务,您可能想要设置 ansible_user。有关详细信息,请参阅 the inventory documentation