2017-07-04 162 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