在shell脚本中访问两个不同的Postgres数据库时发生密码问题

我正在编写一个shell脚本,它将从一台服务器执行pg_dump,稍后它将把转储恢复到另一台服务器上的数据库中。

要访问第一台服务器上的Postgres数据库,我使用export PGPASSWORD来避免密码提示。

当我在第二台服务器的Postgres数据库上执行还原时,系统会提示input用户密码。 我试图重新声明导出PGPASSWORD(因为这个数据库的密码是不同的),但是这是行不通的。 我怀疑它有一个事实,我必须加倍SSH跳来访问第二个数据库:

export PGPASSWORD=****** perform pg_dump ... export PGPASSWORD=******** cat out.sql | ssh -i .ssh/server1.pem root@dev.hostname.com "ssh -i .ssh/server2 \ 0.0.0.0 psql -U postgres -h localhost -p 5432 DBNAME" 

以上结果是:

 Password for user postgres: psql: FATAL: password authentication failed for user "postgres" 

有没有人有什么build议? 谢谢!

您可以在您的主目录中创建一个名为.pgpass的文件并在其中提供密码详细信息:

喜欢 :

猫.pgpass

主机名:端口:数据库:用户名:密码

本地主机:2323:TEST_DB:test_user:test123 **

试试这个。 希望你的问题将得到解决。

.ssh/environment文件就是你想要的。 我认为该文件需要在server1上,而server2需要配置为允许用户修改他们的环境(通过PermitUserEnvironment选项,详情请参阅man ssh下的man ssh