使用个人用户帐户 (userx),我在所有指定的主机上运行 ansible playbook。在 ansible.cfg 中,要使用的远程用户(可以成为 root)是:
remote_user = ansible
对于远程主机来说,这一切都工作正常。它以 Ansible 用户身份连接,并根据需要执行所有任务,还更改需要 root 权限的信息(如
/etc/ssh/sshd_config
)。
但现在我还想在 Ansible 主机本身上执行剧本。我将以下内容放入我的库存文件中:
localhost ansible_connection=local
现在确实在本地主机上执行。但是作为 userx,这会导致它需要执行的某些任务“访问被拒绝”。
这当然在某种程度上是预料之中的,因为remote_user告诉了一些关于remote的信息,而不是本地用户。但我仍然希望剧本也能在本地
--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:
消息将始终显示当前用户,因为该帐户用于“连接”。
稍后,从模块 get 调用的命令以提升的权限执行。
当然,您可以在游戏级别或单个任务上添加
become: yes
。
请问你是怎么解决问题的,能给我详细的解决过程吗