使用--become for ansible_connection = local

时间:2017-07-04 09:16:33

标签: ansible ansible-inventory

使用个人用户帐户(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?

1 个答案:

答案 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