Ansible apt模块与sudo一起执行

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

我正在尝试让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: 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)
仅仅意味着用户可以像任何用户一样执行命令。现在就是这样。非常感谢。