使用 --become 表示 ansible_connection=local

问题描述 投票:0回答:2

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

ansible ansible-inventory
2个回答
6
投票

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

  • 剧本:

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


0
投票

请问你是怎么解决问题的,能给我详细的解决过程吗

© www.soinside.com 2019 - 2024. All rights reserved.