使用--been for ansible_connection=local
我使用个人用户帐户(userx)在所有指定主机上运行ansible playbook。在ansible.cfg中,要使用的远程用户(可以成为root用户)是:使用--been for ansible_connection=local,ansible,ansible-inventory,Ansible,Ansible Inventory,我使用个人用户帐户(userx)在所有指定主机上运行ansible playbook。在ansible.cfg中,要使用的远程用户(可以成为root用户)是: remote_user = ansible 对于远程主机,这一切都很好。它以用户身份连接,并根据需要执行所有任务,同时更改需要root权限的信息(如/etc/ssh/sshd\u config) 但现在我还想在Ansible主机本身上执行剧本。我将以下内容放在我的库存文件中: localhost ansible_connection=l
remote_user = ansible
对于远程主机,这一切都很好。它以用户身份连接,并根据需要执行所有任务,同时更改需要root权限的信息(如/etc/ssh/sshd\u config
)
但现在我还想在Ansible主机本身上执行剧本。我将以下内容放在我的库存文件中:
localhost ansible_connection=local
它现在确实在本地主机上执行。但作为userx,这会导致它需要执行的某些任务被“拒绝访问”
这当然是意料之中的,因为远程用户告诉我们有关远程的信息,而不是本地用户。但是,我仍然希望playbook也能成为本地的,以root身份执行任务(例如,sudosu-
)。这样做似乎是不可能的
用--been-vvv
运行剧本告诉我
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: userx
为用户建立本地连接:userx
而且它似乎没有尝试用sudo执行任务。如果不使用sudo,任务就会失败
如何告诉ansible在本地连接上也使用sudo/been?无需任何特殊要求。证明:
- 剧本:
--- - hosts: localhost gather_facts: no connection: local tasks: - command: whoami register: whoami - debug: var: whoami.stdout
- 执行行:
ansible-playbook playbook.yml --become
- 结果是:
PLAY [localhost] *************************************************************************************************** TASK [command] ***************************************************************************************************** changed: [localhost] TASK [debug] ******************************************************************************************************* ok: [localhost] => { "changed": false, "whoami.stdout": "root" } PLAY RECAP ********************************************************************************************************* localhost : ok=2 changed=1 unreachable=0 failed=0
为用户建立本地连接:
消息将始终显示当前用户,因为它是用于“连接”的帐户
稍后,从模块调用的命令将以提升的权限执行
当然,您可以在游戏级别或个人任务中添加
been:yes
。非常感谢您提供的证据。它帮助我找到了真正的问题:遥控器工作了,因为他们以ansible
用户的身份登录,拥有正确的权限。在本地,所需的特定任务变为。我试图在清单文件级别指定它,但通过将其设置为=ansible
(计算结果为false)而误用了ansible\u变得
。然后清单文件优先于命令行--been
,这最终导致任务失败。