Postgresql

psql:fe_sendauth:未提供密碼

  • March 13, 2020

我有一個正在執行的 PostgreSQL 數據庫。現在我想在我的數據庫上自動執行一些操作,但我的密碼有問題。

我正在使用以下 bash 腳本:

#!/bin/bash
export PGPASSWORD="postgres"
sudo -u postgres psql -d pg_ldap -w --no-password -h localhost -p 5432 -t -c "SELECT id FROM radusers WHERE id=1"

當我執行 bash 腳本時,出現以下錯誤:

psql: fe_sendauth: no password supplied

我什至嘗試在我的主目錄中配置 .pgpass 文件,但無濟於事:

*:*:*:postgres:postgres

我已經執行了以下命令:

sudo chmod 0600 .pgpass

然而,似乎沒有任何方法有效。有誰有想法嗎?我忘記做某事了嗎?

sudo不保留大多數環境變數。如果要為在 下執行的命令指定環境變數,請執行以下sudo操作sudo

sudo PGPASSWORD="postgres" -u postgres psql -d pg_ldap -w --no-password -h localhost -p 5432 -t -c "SELECT id FROM radusers WHERE id=1"

是否sudo允許這樣做將取決於您網站上有效的安全政策。

我不推薦這種方法,因為它會在命令行歷史記錄和程序列表中公開密碼。使用文件要好得多.pgpass,或者最好設置pg_hba.conf為對來自 userpeer的連接進行身份驗證。local``postgres

您可以使用.pgpass文件,但它必須是.pgpass您要訪問的使用者的文件,而不是您要訪問的sudo使用者*;*它需要在這種情況下。想一想:running as不知道你是從你的帳戶執行它,它不知道你的使用者帳戶是什麼,即使它知道它也沒有作為使用者的讀取權限。sudo``~postgres/.pgpass``psql``postgres``sudo``postgres``~youruser/.pgpass

此外,-w與 相同--no-password。兩者都指定是沒有意義的。

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