Ansapt apt模块以sudo执行

时间:2020-05-30 18:14:28

标签: ansible

我正在尝试执行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

1 个答案:

答案 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