远程服务器上的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。
我正在使用 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。