平常工作中,有時需要異地連接 PostgreSQL 數據庫做些維護,例如異地備份等;
如果備份腳本寫在異地機器,備份的時候會彈出密碼輸入提示,那麼腳本就不能後臺執
行,這裏總結了幾種不彈出密碼輸入提示的方法。
--測試環境
目標庫IP: 192.168.1.25/1921 ; 數據庫 skytf
客戶端IP: 192.168.1.26
--在 192.168.1.26 連接數據庫 skytf , 彈出密碼提示
postgres@db6-> psql -h 192.168.1.25 -p 1921 skytf skytf
Password for user skytf:
方法一:設置環境變量 PGPASSWORD
PGPASSWORD 是 PostgreSQL 系統環境變量,在客戶端設置這後,那麼在客戶
端連接遠端數據庫時,將優先使用這個密碼。
--測試
postgres@db6-> export PGPASSWORD=skytf
postgres@db6-> psql -h 192.168.1.25 -p 1921 skytf skytf
psql (9.1beta3, server 9.0.1)
WARNING: psql version 9.1, server version 9.0.
Some psql features might not work.
Type "help" for help.
skytf=> \q
備註:設置環境變量 PGPASSWORD ,連接數據庫不再彈出密碼輸入提示。 但是從安全性
方面考慮,這種方法並不推薦,
方法二:設置 .pgpass 密碼文件
通過在客戶端 /home/postgres 目錄下創建隱藏文件 .pgpass ,從而避免連接
數據庫時彈出密碼輸入提示。
--創建密碼文件 .pgpass ( on 客戶端 )
vi /home/postgres/.pgpass
--格式
hostname:port:database:username:password
--範例
192.168.1.25:1921:skytf:skytf:skytf
--權限
Chmod 600 .pgpass
--連接測試
postgres@db6-> psql -h 192.168.1.25 -p 1921 skytf skytf
psql (9.1beta3, server 9.0.1)
WARNING: psql version 9.1, server version 9.0.
Some psql features might not work.
Type "help" for help.
skytf=>
備註:在/home/postgres 目錄創建了密碼文件 .pgpass 文件後,並正確配置連接信息,
那麼客戶端連接數據時會優先使用 .pgass文件, 並使用匹配記錄的密碼,從而
不跳出密碼輸入提示,這種方法比方法一更安全,所以推薦使用創建 .pgpass 文
件方式。
方法三:修改服務端 pg_hba.conf
修改認證文件 $PGDATA/pg_hba.conf, 添加以下行, 並 reload使配置立即生效。
host skytf skytf 172.16.3.174/32 trust
[postgres@192_168_1_26 pg_root]$ pg_ctl reload -D $PGDATA
server signaled
--服務端 pg_hba.conf 的配置
# IPv4 local connections:
host all all 127.0.0.1/32 trust
host skytf skytf 172.16.3.174/32 trust
host all all 0.0.0.0/0 md5
--客戶端再次連接測試
postgres@db6-> psql -h 192.168.1.25 -p 1921 skytf skytf
psql (9.1beta3, server 9.0.1)
WARNING: psql version 9.1, server version 9.0.
Some psql features might not work.
Type "help" for help.
skytf=> \q
備註:修改服務端 pg_hba.conf 並 reload 後,不再彈出密碼輸入提示。