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