对 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