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

时间:2012-08-24 15:47:50

标签: linux postgresql shell scripting postgresql-9.1

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

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

当我在第二台服务器的Postgres数据库上执行恢复时,系统会提示我输入用户密码。我试图重新声明导出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"

有没有人有任何建议?谢谢!

2 个答案:

答案 0 :(得分:3)

您可以在主目录中创建名称为.pgpass&的文件。在那里提供密码详情:

喜欢:

cat .pgpass

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

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

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

答案 1 :(得分:0)

.ssh/environment文件就是您想要的。我认为该文件需要在server1上,并且需要配置server2以允许用户修改他们的环境(通过PermitUserEnvironment选项。请参阅" ENVIRONMENT"下的man ssh。了解更多详情。