Ansible apt模块与sudo一起执行
我正在尝试让ansible执行Ansible apt模块与sudo一起执行,ansible,Ansible,我正在尝试让ansible执行sudo apt get update。我已经有了无密码运行的sudoers设置,如果我以用户ansible的身份登录并执行sudo apt get update,它就会工作。如果我使用下面的ansible剧本 --- - name: updates hosts: pis tasks: - name: Update APT become: true apt: update_cache
sudo apt get update
。我已经有了无密码运行的sudoers
设置,如果我以用户ansible的身份登录并执行sudo apt get update
,它就会工作。如果我使用下面的ansible剧本
---
- 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
使用
been:yes
时,连接将尝试将shell生成为root(因为您没有指定been\u user
)
您似乎可以在没有密码的情况下运行sudo apt get update
,即:
/etc/sudoers
可能包含类似的内容:
ansible ALL=(ALL)NOPASSWD:/bin/apt get update
要复制该问题,请以用户ansible
身份登录并发出命令sudo-i
如果您正在使用专用用户(ansible
?)进行所有ansible连接,您可能希望让该用户无需密码即可通过sudo访问所有命令。但是,这不是最佳做法,出于安全原因,您最好允许访问特定命令
使用visudo/etc/sudoers
ansible ALL=(ALL)NOPASSWD:ALL
如果您选择此选项,我还建议对此特权帐户使用密钥对身份验证,而不是密码身份验证 对。我创建了用户
ansible
,这样ansible就可以通过键进行ssh,并执行/etc/sudoers
sudo-l
中允许的特定命令和特定sudo命令。这个输出与上面定义的(root)NOPASSWD:/usr/bin/apt get update
略有不同sudo-i
输出是对不起,不允许用户ansible执行“/bin/zsh”
我是否需要将/bin/zsh
添加到/etc/sudoers
中?sudo-i
的输出表明用户ansible
无法以root身份启动shell,这正是您在尝试变成:yes
(或变成:true
)时所体验到的ansible。如果您考虑一下,允许ansible
访问以root身份运行完整的shell,您将允许该用户以root身份运行其中的任何命令,包括生成其他shell。因此,根据上面链接的文章,在sudoers
文件ansible ALL=(root)NOPASSWD:ALL
中添加以下行可能更合理ALL=(ALL)
仅仅意味着用户可以像任何用户一样执行命令。现在就是这样。非常感谢。