我正在尝试执行sudo apt-get update
。我已经有sudoers
设置可以在没有密码的情况下运行,并且如果我以用户ansible正在使用并执行sudo apt-get update
的身份登录,则该设置有效。如果我使用以下有趣的剧本
---
- name: updates
hosts: pis
tasks:
- name: Update APT
become: true
apt:
update_cache: yes
这会给我以下错误
fatal: [127.0.0.1]: FAILED! => {"changed": false, "module_stderr": "Shared connection to 127.0.0.1 closed.\r\n", "module_stdout": "sudo: a password is required\r\n", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}
但以下剧本可以正常工作
---
- name: updates
hosts: pis
tasks:
- name: Update APT
command: sudo apt-get update
答案 0 :(得分:2)
使用become: yes
时,连接将尝试以root身份生成shell (因为您未指定become_user
)。
似乎您无需输入密码即可运行sudo apt-get update
,即
/etc/sudodoers
可能包含类似以下内容:
ansible ALL=(ALL) NOPASSWD: /bin/apt-get update
要复制问题,请以用户ansible
登录并发出命令sudo -i
如果您使用专用用户(ansible
?)进行所有可访问的连接,则可能希望通过sudo授予该用户访问所有命令的权限,而无需输入密码。 Read Here 但这不是最佳做法,出于安全原因,最好还是授予对特定命令的访问权限
使用/etc/sudoers
将以下行添加到visudo /etc/sudoers
文件中
ansible ALL=(ALL) NOPASSWD:ALL
如果您选择这样做,我还建议对此特权帐户使用密钥对身份验证,而不要使用密码身份验证。 More info