使用 --become for ansible_connection=local

Dnl*_*Dnl 4 ansible ansible-inventory

使用个人用户帐户 (userx),我在所有指定的主机上运行 ansible playbook。在 ansible.cfg 中,要使用的远程用户(可以成为 root)是:

remote_user = ansible
Run Code Online (Sandbox Code Playgroud)

对于远程主机,这一切正常。它以用户 Ansible 的身份连接,并根据需要执行所有任务,同时更改/etc/ssh/sshd_config需要 root 权限的信息(如)。

但现在我也想在 Ansible 主机上执行剧本。我将以下内容放入我的库存文件中:

localhost ansible_connection=local
Run Code Online (Sandbox Code Playgroud)

现在确实在本地主机上执行。但是作为userx,这会导致它需要执行的某些任务“拒绝访问”。

这当然在某种程度上是预料之中的,因为 remote_user 讲述了一些关于remote 的信息,而不是本地用户。但是,我仍然希望剧本也能--become在本地以 root 身份执行任务(例如sudo su -)。似乎没有这样做。

运行剧本--become -vvv告诉我

<localhost> ESTABLISH LOCAL CONNECTION FOR USER: userx
Run Code Online (Sandbox Code Playgroud)

并且似乎不会尝试使用 sudo 执行任务。如果不使用 sudo,任务就会失败。

我如何告诉 ansible 在本地连接上也使用 sudo / become ?

tec*_*raf 5

没有什么特别的要求。证明:

  • 剧本:

    ---
    - hosts: localhost
      gather_facts: no
      connection: local
      tasks:
        - command: whoami
          register: whoami
        - debug:
            var: whoami.stdout
    
    Run Code Online (Sandbox Code Playgroud)
  • 执行线:

    ansible-playbook playbook.yml --become
    
    Run Code Online (Sandbox Code Playgroud)
  • 结果:

    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
    
    Run Code Online (Sandbox Code Playgroud)

ESTABLISH LOCAL CONNECTION FOR USER:消息将始终显示当前用户,因为它是用于“连接”的帐户。

稍后从模块 get(s) 调用的命令以提升的权限执行。


当然,您可以添加become: yes游戏级别或单个任务。