使用--been for ansible_connection=local

使用--been for ansible_connection=local,ansible,ansible-inventory,Ansible,Ansible Inventory,我使用个人用户帐户(userx)在所有指定主机上运行ansible playbook。在ansible.cfg中,要使用的远程用户(可以成为root用户)是: remote_user = ansible 对于远程主机,这一切都很好。它以用户身份连接,并根据需要执行所有任务,同时更改需要root权限的信息(如/etc/ssh/sshd\u config) 但现在我还想在Ansible主机本身上执行剧本。我将以下内容放在我的库存文件中: localhost ansible_connection=l

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

remote_user = ansible
对于远程主机,这一切都很好。它以用户身份连接,并根据需要执行所有任务,同时更改需要root权限的信息(如
/etc/ssh/sshd\u config

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

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

这当然是意料之中的,因为远程用户告诉我们有关远程的信息,而不是本地用户。但是,我仍然希望playbook也能成为本地的,以root身份执行任务(例如,
sudosu-
)。这样做似乎是不可能的

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

<localhost> ESTABLISH LOCAL CONNECTION FOR USER: userx
为用户建立本地连接:userx
而且它似乎没有尝试用sudo执行任务。如果不使用sudo,任务就会失败


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

无需任何特殊要求。证明:

  • 剧本:

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

为用户建立本地连接:
消息将始终显示当前用户,因为它是用于“连接”的帐户

稍后,从模块调用的命令将以提升的权限执行



当然,您可以在游戏级别或个人任务中添加
been:yes

非常感谢您提供的证据。它帮助我找到了真正的问题:遥控器工作了,因为他们以
ansible
用户的身份登录,拥有正确的权限。在本地,所需的特定任务
变为
。我试图在清单文件级别指定它,但通过将其设置为
=ansible
(计算结果为false)而误用了
ansible\u变得
。然后清单文件优先于命令行
--been
,这最终导致任务失败。