如何在ansible中成为密码未知的非特权用户

如何在ansible中成为密码未知的非特权用户,ansible,Ansible,我想确保创建了postgresql数据库 为此,我有一本扮演postgresql角色的剧本。通过ssh登录到服务器时使用了一个未经授权的用户,让他命名为sshUser。每当我想以特权用户身份运行命令时,我就使用been_user:root。在配置中,我为root用户启用了been\u ask\u pass - name: Add the user 'postgres' user: name: postgres state: present become_user: roo

我想确保创建了postgresql数据库

为此,我有一本扮演postgresql角色的剧本。通过ssh登录到服务器时使用了一个未经授权的用户,让他命名为sshUser。每当我想以特权用户身份运行命令时,我就使用been_user:root。在配置中,我为root用户启用了been\u ask\u pass

- name: Add the user 'postgres'
  user:
    name: postgres
    state: present
  become_user: root
现在我想以用户postgres的身份检查数据库。用不可解析的术语来说,我想成为root而不是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用户

编辑:到目前为止我所尝试的:

我尝试在全局和本地使用been:yes,可能是任何组合的auf-been_方法:su | sudo,以及在配置中启用管道和允许_-world_-readable_-tmpfiles

错误是

  • 使用BEN:yes和BEN\U方法su的任意组合时出现“错误su密码”
  • 当使用been:yes和been\u method:sudu的任意组合时,“sshUser不在sudoers文件中”
  • 不使用BENG时“用户postgres的对等身份验证失败”:完全是
最后一个是postgresql错误,因此我不确定它是否离我想要的位置更近了一步,因为它似乎使用了正确的用户。sudo-u postgres psql确实可以工作,所以我不知道为什么它在验证用户postgres是否正确登录时会出现问题

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

是的,有

启用模式的密码

如果需要密码才能进入启用模式,可以在一个 有两种方式:

提供--ask been pass命令行选项设置 ansible\u成为\u传递连接变量


正如larsks提到的,不可能链接用户更改。该文件记录在:

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


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

您可以尝试在playbook中设置新的“成为通行证”

  - name: set password variable
    set_fact: 
      ansible_become_pass: "{{ newPassword }}"

Ansible无法执行这种两步权限提升。您需要将
sshUser
sudo
能力授予
postgres
用户。您确定
psql--user=postgres
(在本地计算机上由
root
执行时)不会只做正确的事情吗?查看
pg_hba.conf
将知道谁是和不允许这样做的what@MatthewLDaniel会的,但我如何使用它来确保数据库具有ansible?因为据我所知,我不能在一个命令中完成这项工作,对吗?通过使用显式参数和您的正常
been\u user:
语句,使
root
执行
createdb--user=postgres
得到正确的结果,很抱歉回复太晚:这(以及psql--user=postgres)如果postgres没有md5登录,则不起作用(我认为)。在没有初始添加postgres用户+密码的情况下,我得到错误“对等身份验证失败”。我已设置了ansible_Been_pass,但我需要在那里提供根密码,而不是postgres用户密码
  - name: set password variable
    set_fact: 
      ansible_become_pass: "{{ newPassword }}"