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

远程服务器上的ansible权限问题,ansible,ansible-playbook,ansible-2.x,Ansible,Ansible Playbook,Ansible 2.x,我正在运行以下任务,使用Ansible 2.1在Ubuntu14操作系统上运行debian软件包,但将异常复制到下面。远程用户在远程计算机上没有sudo权限 - name: run dpkg shell: dpkg -i {{ debian_build.stdout }} become: true become_user: ubuntu become_method: sudo 错误 fatal: [testserver]: FAILED! => {"changed":

我正在运行以下任务,使用Ansible 2.1在Ubuntu14操作系统上运行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最佳实践,您也不应该使用Been切换到非特权用户:


首先,您应该以正确的用户身份运行此playbook,例如使用远程用户。

我能够以sudo dpkg-I{{debian_build.stdout}的身份运行它。想知道为什么没有使用“成为”部分,我将切换到root而不是ubuntu——或者有更好的方法吗?如果你需要运行dpkg,你需要成为root。您只需执行“been:yes”即可(在ansible中默认情况下)将您切换到root。