远程服务器上的ansible特权问题

ansible privilege issue on remote server

我正在使用 Ansible 2.1 运行将以下任务 运行 到 ubuntu 14 OS 上的 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": []}

因为这个;

become: true
become_user: ubuntu 
become_method: sudo

是否等同于 shell:

myuser$ sudo su ubuntu
ubuntu$

您正在使用 sudo 切换到非特权用户帐户。 "Ubuntu" 在不调用 sudo 的情况下无法访问 运行 dpkg,这就是为什么如果将 sudo 放在 shell 命令中,您的 playbook 会起作用。

根据 Ansible 最佳实践,您也不应该使用 become 来切换到非特权用户: http://docs.ansible.com/ansible/become.html#becoming-an-unprivileged-user

您应该 运行 此剧本作为正确的用户开始,例如使用 remote_user。