You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible配置PostgreSQL时Peer认证失败问题求助

解决Ansible配置PostgreSQL时的Peer认证失败问题

错误核心原因

你的问题出在PostgreSQL的pg_hba.conf和用户映射(user_map)配置错误:

  • 日志显示no match in usermap "user_map" for user "postgres" authenticated as "postgres",说明你的user_map规则格式错误,且实际上当你以postgres系统用户执行Ansible任务时,不需要额外映射即可通过peer认证。
  • 错误的映射规则和pg_hba配置导致认证失败,而添加become: yes会切换到root用户执行,触发PostgreSQL socket权限的其他问题。

分步解决方案

1. 修正pg_hba.conf配置

编辑目标机器上的/etc/postgresql/<your-postgres-version>/main/pg_hba.conf(Ubuntu 22.04默认是14版本,路径为/etc/postgresql/14/main/pg_hba.conf):

  • 针对postgres用户的本地连接,恢复默认的peer认证(无需映射):
    local   all             postgres                                peer
    
  • 如果你想对所有本地用户统一使用映射,确保规则正确:
    local   all             all                                     peer map=user_map
    

2. 正确配置用户映射(pg_ident.conf)

如果保留map=user_map,编辑/etc/postgresql/<version>/main/pg_ident.conf,添加正确的映射规则:

user_map  postgres  postgres

规则格式为:[映射名] [操作系统用户名] [数据库用户名],你之前的postgres boop postgres格式完全错误,导致无法匹配。

3. 调整Ansible任务的连接参数

在创建数据库用户的任务中,明确指定PostgreSQL登录参数,确保模块用正确的身份连接:

- name: create database user
  postgresql_user:
    name: test1
    password: boop
    login_user: postgres
    login_unix_socket: /var/run/postgresql/
  • login_user: postgres 指定用postgres数据库用户登录
  • login_unix_socket 指定socket路径,避免连接问题

4. 重启PostgreSQL服务生效配置

在Ansible的Setup playbook末尾添加重启任务(确保用become: true获取权限):

- name: Restart PostgreSQL to apply config changes
  become: true
  service:
    name: postgresql
    state: restarted

5. 验证配置有效性

先在目标机器上手动验证:

su - postgres
psql -U postgres

如果能正常进入PostgreSQL命令行,说明认证配置正确,再重新运行Ansible playbook即可。

关键注意事项

  • 不要在数据库任务块中添加become: yes,因为你已经通过become_user: postgres切换到了PostgreSQL专用用户,root用户连接PostgreSQL需要额外的认证配置,反而容易引发权限问题。
  • Ubuntu 22.04默认安装的PostgreSQL版本为14,注意配置文件的路径要对应版本号。

内容的提问来源于stack exchange,提问作者deeply confused shrimp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 01:35:15