2016-10-10 62 views
1

我正在運行以下任務,在使用Ansible 2.1的ubuntu 14操作系統上運行debian軟件包,但在下面複製了異常。遠程用戶在遠程機器上具有sudo權限。在遠程服務器上的可靠特權問題

- name: run dpkg 
    shell: dpkg -i {{ debian_build.stdout }} 
    become: true 
    become_user: ubuntu 
    become_method: sudo 

錯誤

fatal: [testserver]: FAILED! => {"changed": true, "cmd": "dpkg -i /home/ubuntu/test-server_0.1.0-7c47d103f8da21045e3ee817529eb84a0aa79723_all.deb", "delta": "0:00:00.002444", "end": "2016-10-10 14:33:32.014887", "failed": true, "rc": 2, "start": "2016-10-10 14:33:32.012443", "stderr": "dpkg: error: requested operation requires superuser privilege", "stdout": "", "stdout_lines": [], "warnings": []} 
+0

我能夠運行它作爲sudo dpkg -i {{debian_build.stdout}}。想知道爲什麼成爲部分沒有被使用 –

回答

1

由於這種;

become: true 
become_user: ubuntu 
become_method: sudo 

是殼這樣的equivelant:

myuser$ sudo su ubuntu 
ubuntu$ 

您使用sudo切換到非特權用戶帳戶。 「Ubuntu」無法在不調用sudo的情況下運行dpkg,這就是爲什麼如果將sudo放入shell命令中,您的手冊可以正常工作。

你也應該不使用變得切換到每Ansible最佳實踐特權的用戶: http://docs.ansible.com/ansible/become.html#becoming-an-unprivileged-user

你應該用這個劇本是正確的用戶通過使用REMOTE_USER例如開始。

+0

我將切換到根,而不是Ubuntu - 或者有更好的方法? –

+1

如果您需要運行dpkg,您需要成爲root用戶。你可以做「成爲:是」,這將(默認情況下)轉爲根。 – Avalon