对 ansible_connection=local 使用 --become
Using --become for ansible_connection=local
我使用个人用户帐户 (userx) 运行 在我指定的所有主机上运行 ansible 剧本。在 ansible.cfg 中,要使用的远程用户(可以成为 root)是:
remote_user = ansible
对于远程主机,一切正常。它以用户 Ansible 的身份连接,并根据需要执行所有任务,还更改需要 root 权限的信息(如 /etc/ssh/sshd_config
)。
但现在我还想在 Ansible 主机本身上执行剧本。我将以下内容放入我的库存文件中:
localhost ansible_connection=local
现在确实在本地主机上执行。但是作为 userx,这会导致 "Access denied" 它需要完成某些任务。
这当然有点意料之中,因为 remote_user 讲述了一些关于 远程 的事情,而不是本地用户。但是,我仍然希望 playbook 也会在本地 --become
,以 root 身份执行任务(例如 sudo su -
)。好像不行。
运行 --become -vvv
的剧本告诉我
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: userx
而且似乎没有尝试使用 sudo 执行任务。如果不使用 sudo,任务将失败。
如何告诉 ansible 在本地连接上也使用 sudo / become?
没有什么特别的要求。证明:
剧本:
---
- 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
ESTABLISH LOCAL CONNECTION FOR USER:
消息将始终显示当前用户,因为它是使用的帐户 "to connect"。
稍后从模块调用的命令将以提升的权限执行。
当然,您可以在游戏级别或个人任务中添加 become: yes
。
我使用个人用户帐户 (userx) 运行 在我指定的所有主机上运行 ansible 剧本。在 ansible.cfg 中,要使用的远程用户(可以成为 root)是:
remote_user = ansible
对于远程主机,一切正常。它以用户 Ansible 的身份连接,并根据需要执行所有任务,还更改需要 root 权限的信息(如 /etc/ssh/sshd_config
)。
但现在我还想在 Ansible 主机本身上执行剧本。我将以下内容放入我的库存文件中:
localhost ansible_connection=local
现在确实在本地主机上执行。但是作为 userx,这会导致 "Access denied" 它需要完成某些任务。
这当然有点意料之中,因为 remote_user 讲述了一些关于 远程 的事情,而不是本地用户。但是,我仍然希望 playbook 也会在本地 --become
,以 root 身份执行任务(例如 sudo su -
)。好像不行。
运行 --become -vvv
的剧本告诉我
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: userx
而且似乎没有尝试使用 sudo 执行任务。如果不使用 sudo,任务将失败。
如何告诉 ansible 在本地连接上也使用 sudo / become?
没有什么特别的要求。证明:
剧本:
--- - 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
ESTABLISH LOCAL CONNECTION FOR USER:
消息将始终显示当前用户,因为它是使用的帐户 "to connect"。
稍后从模块调用的命令将以提升的权限执行。
当然,您可以在游戏级别或个人任务中添加 become: yes
。