2017-07-04 72 views
0

使用个人用户帐户(userx),我在所有指定的主机上运行完整的操作手册。在ansible.cfg要使用的远程用户(其可以成为根)为:使用--begin for ansible_connection = local

remote_user = ansible 

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

但是现在我也想在Ansible主机本身上执行剧本。我把以下放在我的清单文件中:

localhost ansible_connection=local 

它现在确实在localhost上执行。但是,作为userx,这导致“访问被拒绝”,它需要做的一些任务。

这当然有点期待,因为remote_user告诉远程,而不是本地用户。但是,我仍然希望本地的剧本也会以--become的身份执行任务(例如sudo su -)。似乎没有这样做。

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

<localhost> ESTABLISH LOCAL CONNECTION FOR USER: userx 

,似乎不尝试用sudo来执行任务。如果不使用sudo,任务将失败。

我该如何告诉使用sudo /成为本地连接呢?

回答

0

没有特别的要求。证明:

  • 的剧本:

    --- 
    - 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:消息将始终显示当前用户,因为它使用“连接”帐户。

后来从模块中调用的命令将以提升的权限执行。


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

+0

非常感谢您提供证明。它帮助我找到了真正的问题:遥控器工作正常,因为他们以“安全”用户身份登录,并拥有正确的权利。在本地,具体任务需要'成为'。我试图在库存文件级别指定它,但是通过将'ansible_become'设置为'= ansible'(计算结果为false)来误用它。然后库存文件优先于命令行“--become”,最终导致失败的任务。 – Dnl

相关问题