首页 > 解决方案 > 如何在ansible中成为具有未知密码的非特权用户

问题描述

我想确保创建了一个 postgresql 数据库。

为此,我有一本带有 postgresql 角色的剧本。通过 ssh 登录服务器使用非特权用户,让他命名为 sshUser。每当我想以特权用户身份运行命令时,我都会使用 become_user: root。在配置中,我为 root 用户启用了 become_ask_pass。

- name: Add the user 'postgres'
  user:
    name: postgres
    state: present
  become_user: root
[privilege_escalation]
become_user=root
become_ask_pass=True

现在我想以用户 postgres 的身份检查数据库。用非可靠的术语来说,我想成为 root und 而不是 sudo -u postgres psql,因为我有 root 密码但没有 postgres 密码。如果我不是 root,我会在尝试执行以下操作时得到“sshUser 不在 sudoers 文件中”:

- name: Ensure database is created
  postgresql_db: 
    name: "{{ db_name }}"
    encoding: UTF-8
    state: present
  become_user: postgres

有没有办法成为root用户?

编辑:到目前为止我已经尝试过:

我尝试使用 become: yes 全局以及本地,可能是任何组合 auf become_method: su | sudo 以及在配置中启用流水线和 allow_world_readable_tmpfiles。

错误是

最后一个是 postgresql 错误,所以我不确定它是否离我想要的位置更近了一步,因为它似乎使用了正确的用户。sudo -u postgres psql 不过确实可以工作,所以我不知道为什么如果用户 postgres 正确登录,它会出现身份验证问题。

我使用的是 Ansible 2.5.1,我要安装 postgresql 的主机是 debian buster。

标签: ansible

解决方案


正如 larsks 所提到的,不可能链接用户更改。这记录在:https ://docs.ansible.com/ansible/2.4/become.html#becoming-an-unprivileged-user

方法不能被链接。您不能使用 sudo /bin/su - 要成为用户,您需要具有在 sudo 中以该用户身份运行命令或能够直接 su 到它的权限

我仍在寻找解决方法,但现在我会将 sshUser 添加到 sudoers。


推荐阅读