Ansible中缺少sudo密码

use*_*652 22 ansible

Ansible从以下代码请求sudo密码,它尝试创建一个新的postgres用户.

错误信息:

致命:[xxx.xxx.xxx.xxx] =>缺少sudo密码

main.yml

- name: 'Provision a PostgreSQL server'
  hosts: "dbservers"
  sudo: yes
  sudo_user: postgres
  roles:
    - postgres
Run Code Online (Sandbox Code Playgroud)

create_db.yml

- name: Make sure the PostgreSQL users are present
  postgresql_user: name=rails password=secret role_attr_flags=CREATEDB,NOSUPERUSER
  sudo_user: postgres
  sudo: yes
Run Code Online (Sandbox Code Playgroud)

用于登录此计算机的remote_user 是非root用户,没有密码,只能使用密钥身份验证登录.

对于用户postgres,此帐户也没有密码,因为刚刚安装了数据库.

由于我以 root用户身份登录,因此当切换到postgress帐户以创建数据库用户时,它会询问密码.但是如果从root帐户切换到postgres,则不需要密码.所以,我想知道是否有办法切换到root,然后切换到用户postgres.

注意:root帐户没有公钥,没有密码,也无法从SSH登录.

Asi*_*mez 22

您可以在运行 Ansible playbook 时指定 sudo 密码:

ansible-playbook playbook.yml -i inventory.ini --extra-vars "ansible_sudo_pass=yourPassword"
Run Code Online (Sandbox Code Playgroud)

  • 将 sudo 密码放在命令行上不是一个好主意 (11认同)
  • 你可以在ansible.cfg中将“become_ask_pass”设置为True,系统会提示输入。或者,如果你想完全自动化,可以使用 Ansible Vault 来避免这种情况,将密码保存在加密文件中,只需要添加 --ask-vault-pass (或其他一些机制,如保存保管库密码本身位于您的主目录的隐藏文件中,具有仅供您使用的访问权限)... (2认同)

Man*_*tra 12

将一个文件添加到/etc/sudoers.d目标机器上名为 postgres的目录中,其内容如下:

postgres ALL=(ALL) NOPASSWD:ALL
Run Code Online (Sandbox Code Playgroud)

这可确保 postgres 用户(假设您将其用作 sudo 用户)在尝试 sudo 命令时不会被要求输入密码。

如果您使用不同的用户连接到目标机器,那么您必须修改上述内容以将 NOPASSWD 权限授予该用户。

请参阅此处了解更多详情。


Mxx*_*Mxx 11

您需要修改/etc/sudoers文件或命令visudo以允许您连接到删除服务器的用户在没有密码提示的情况下切换到另一个用户。

  • 我正在使用 supervisorctl 模块,并且我的 `/etc/sudoers` 文件被配置为允许我在没有密码的情况下运行 `sudo supervisorctl`。ansible 执行它的方式,这还不够,你需要能够改变用户。我的解决方法是在没有任何模块支持的情况下直接运行 `command: sudo supervisorctl ...`。 (2认同)

nes*_*nor 7

尝试:

我有类似的问题,我曾经用-k -K(大写)运行我的剧本。该剧本将提示您输入密码。

ansible-playbook mail.yml -k -K 
Run Code Online (Sandbox Code Playgroud)

希望有帮助!

  • 或长``--ask-become-pass`` (18认同)

Try*_*der 5

就我而言,我将信息添加到服务器组的组变量中

所以在 /etc/ansible/group_vars/{servergroup}/vars

我加了

ansible_become: yes 
ansible_become_method: sudo
ansible_become_pass: "{{ vault_ansible_password }}"
Run Code Online (Sandbox Code Playgroud)

这篇文章帮助我找到了答案https://www.cyberciti.biz/faq/how-to-set-and-use-sudo-password-for-ansible-vault/


amd*_*dan 5

如果上述所有解决方案都不适合您,这就是我的情况。我的问题是我的 ansible_user 没有所有权限,我不喜欢允许 root 从 ssh 连接。

\n

但我的测试人员用户没有执行某些操作的所有 sudo 权限:\n初始 tester_user 权限:

\n
tester ALL= NOPASSWD:ALL     # bad\n
Run Code Online (Sandbox Code Playgroud)\n

变成 :

\n
tester ALL=(ALL:ALL) NOPASSWD:ALL    # good\n
Run Code Online (Sandbox Code Playgroud)\n

这些附加字段的含义是:\n第一个 \xe2\x80\x9cALL\xe2\x80\x9d 表示该用户可以以所有用户身份运行命令。\n第二个 \xe2\x80\x9cALL\xe2\x80\x9d 表示该用户用户可以作为所有组运行命令。

\n

最初想限制维护者的权限,但强制 ansible_user 可以运行命令,因为所有用户在 Ansible 中都使用Become_user。

\n