Debian

使用 pgpass 的身份驗證不起作用

  • November 16, 2020

我正在嘗試在 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)。

peer身份驗證意味著 postgresql 接受來自指定 unix 系統使用者的 unix socket 連接,而沒有指定數據庫使用者的密碼,因此嘗試使用 PGPASS 是沒有意義的。有關peer訪問的更多資訊:https ://www.postgresql.org/docs/current/auth-peer.html 在您的情況下,您pg_hba.conf只允許系統使用者postgres以數據庫使用者身份連接所有數據庫postgresdb_user我在你的中看不到你的pg_hba.conf,所以它無法連接。sudo -u postgres pg_dumpall意味著您切換到系統使用者postgrespg_dumpall以該使用者身份連接數據庫使用者執行postgres。這就是它起作用的原因。

引用自:https://serverfault.com/questions/1042457