使用 pgpass 进行身份验证不起作用

使用 pgpass 进行身份验证不起作用

我正在尝试在 Debian 上的本地无头服务器上为 postgres db 设置自动备份。我有一个脚本:

#!/bin/bash
export PGPASSFILE='/home/mtn/.pgpass'
pg_dumpall -U db_user --verbose 2>/var/log/postgresql/pgdump.log | gzip > /mnt/bulk-data/db_backup/db_bak.gz

有一个.pgpass文件:

-rw-------  1 mtn  mtn     47 Nov 13 10:14 .pgpass

和:

*:*:*:postgres:guest
*:*:*:db_user:guest

还有一份sudo crontab -e工作:

20 0 * * * /home/mtn/backup.sh >/dev/null 2>&1

pg_hba

local   all             postgres                                peer

当我尝试运行它时我得到:

pg_dumpall: error: could not connect to database "template1": FATAL:  Peer authentication failed for user "db_user"

错误在哪里?

PS 如果我将脚本更改为以 root 身份运行,则一切都正常sudo -u postgres pg_dumpall

更新:最终对我有用的是将这一行添加到pg_ident.conf

omicron           root                    postgres

然后,在pg_hba.conf一切事情之前:

local   all      all                 ident map=omicron

并将脚本更改为pg_dumpall以用户身份运行postgres(仅仅因为db_user没有所有必要的权限dumpall)。

答案1

peer身份验证意味着 postgresql 通过 unix 套接字接受来自指定 unix 系统用户的连接,而无需密码作为指定的数据库用户,因此尝试使用 PGPASS 是没有意义的。有关peer访问的更多信息,请参见:https://www.postgresql.org/docs/current/auth-peer.html 就您而言,您的pg_hba.conf仅允许系统用户postgres以数据库用户身份连接所有数据库。我在您的 中看postgres不到您的,因此无法连接。意味着您切换到系统用户并以该用户身份运行,以数据库用户身份连接。这就是它起作用的原因。db_userpg_hba.confsudo -u postgres pg_dumpallpostgrespg_dumpallpostgres

相关内容