PostgreSQL与Ansible失败的对等身份验证

oak*_*ice 35 authentication postgresql freebsd ansible ansible-playbook

我在FreeBSD上运行PostgreSQL 9.3.FreeBSD pgsql用作PostgreSQL的默认系统用户.我/usr/local/pgsql/data/pg_hba.conf看起来像这样:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             pgsql                                   peer
local   all             all                                     md5
host    all             all             127.0.0.1/32            md5
host    all             all             ::1/128                 md5
Run Code Online (Sandbox Code Playgroud)

使用此配置,我可以在pgsql没有密码的情况下连接到数据库.

$ su pgsql
$ psql template1
template1=# \l
                         List of databases
...
Run Code Online (Sandbox Code Playgroud)

这按预期工作.

在远程计算机上,我有一个Ansible任务在FreeBSD服务器上创建数据库.

- name: Create the postgresql database
  postgresql_db: name=mydatabase login_user=pgsql
Run Code Online (Sandbox Code Playgroud)

执行此任务失败并显示错误Peer authentication failed for user "pgsql".

PLAY [web] ********************************************************************

GATHERING FACTS ***************************************************************
ok: [host.example.org]

TASK: [database | Create the postgresql database] *****************************
failed: [host.example.org] => {"failed": true}
msg: unable to connect to database: FATAL:  Peer authentication failed for user "pgsql"


FATAL: all hosts have already failed -- aborting
Run Code Online (Sandbox Code Playgroud)

当用户的对等身份验证pgsql明显起作用时,为什么会失败?

git*_*rik 49

这对我有用:

- name: Create postgres database
  become: true
  become_user: postgres
  postgresql_db:
    name: <database-name>
Run Code Online (Sandbox Code Playgroud)

在您的特定情况下,用户可能是pgsql,但我认为通常是用户postgres.


Mos*_*ted 20

或者语法略有不同(来自Ansible 1.9)和用户创建(可能对某些人有帮助)

- name: Create postgres user
  postgresql_user: name={{ pg_user }} password={{ pg_password }}
  become: true
  become_user: postgres
Run Code Online (Sandbox Code Playgroud)

  • Ansible <1.9:`sudo:是的; sudo_user:postgres` (2认同)

Dyl*_*rce 10

对于那些遇到"无法设置临时文件的权限,Ansible需要创建..."以便切换到postgres用户的人,become_user可以在Ubuntu主机上利用流水线操作.

ansible.cfg在您的playbook目录中创建一个并添加以下行:

[ssh_connection]
pipelining=True
Run Code Online (Sandbox Code Playgroud)

  • 感谢您节省一生:) (2认同)
  • 没问题!无数其他人对我做了同样的事情。向前传递。 (2认同)
  • 这对我不起作用。我需要按照所述安装 acl 工具:/sf/ask/2565281631/文件/36681626 (2认同)

Ren*_*ijl 5

我有同样的问题.在我的情况下,我忽略了我将我的Ansible-playbook配置为另一个Linux用户而不是具有对等访问权限的用户(在您的情况下为pgsql).解决方案是将Ansible播放为pgsql:

- name: Create the postgresql database
  remote_user: pgsql
  postgresql_db: name=mydatabase login_user=pgsql
  ...
Run Code Online (Sandbox Code Playgroud)

或者以root身份运行它,并使用su命令pgsql:

- name: Create the postgresql database
  remote_user: root
  become: yes
  become_user: pgsql
  postgresql_db: name=mydatabase login_user=pgsql
  ...
Run Code Online (Sandbox Code Playgroud)

...取决于您通过ssh的访问权限.

这是使用Ansible 2.0.


小智 -4

因此,如果我理解得很好,您在远程计算机上,也许您应该更改 /usr/local/pgsql/data/pg_hba.conf 以允许远程连接“host all all 0.0.0.0/0 md5”或其他特定网络地址。