使用个人用户帐户(userx)我在所有指定的主机上运行ansible playbook。在ansible.cfg中,要使用的远程用户(可以成为root用户)是:
remote_user = ansible
对于远程主机,一切正常。它以用户Ansible的身份连接,并执行所需的所有任务,还更改需要root权限的信息(如/etc/ssh/sshd_config
)。
但是现在我也想在Ansible主机上执行playbook。我在库存文件中添加了以下内容:
localhost ansible_connection=local
现在确实在localhost上执行。但是作为userx,这导致它需要执行某些任务的“拒绝访问”。
这当然有点预期,因为remote_user告诉我们远程,而不是本地用户。但是,我仍然希望剧本在本地--become
,以root身份执行任务(例如sudo su -
)。似乎不这样做。
使用--become -vvv
运行playbook告诉我
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: userx
似乎没有尝试用sudo执行任务。没有使用sudo,任务就失败了。
我怎样才能告诉ansible在本地连接上使用sudo / become?
答案 0 :(得分:2)
不需要特别的东西。证明:
剧本:
---
- 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:
消息将始终显示当前用户,因为该帐户使用&#34;连接&#34;。
稍后,从模块get(s)调用的命令以提升的权限执行。
当然,您可以在游戏级别或单个任务中添加become: yes
。