Postgres:在非交互式脚本中以 postgres 用户身份进行身份验证

Postgres:在非交互式脚本中以 postgres 用户身份进行身份验证

我正在编写一个需要执行 postgres 命令的非交互式脚本。该脚本只能由root具有权限的用户运行sudo,并且 postgres 命令需要以postgrespostgresql 中的用户身份执行。问题是 postgresql 总是(据我所知)交互式地提示输入密码(即pqsl -U postgres -W)或根本不接受密码(即psql -U postgres -w)。我想在命令行上传递密码,类似于 mysql 允许的方式mysql -u user -p password。我怎样才能用 postgres 做到这一点?

答案1

使用PGPASSWORD环境变量。例如:

PGPASSWORD=<password> psql -U postgres -c "<postgresql query>"

来源

答案2

有两种方法可以做同样的事情。

方法一:

.pgpass在用户(运行脚本的用户)的主目录中添加一个文件:

$ cat /home/user/.pgpass
hostname:port:database:user:password
$ chmod 600 /home/user/.pgpass

添加上述内容后,您无需在使用的任何脚本中添加密码。它将直接连接。

方法2:

在 shell 脚本中添加以下内容。但是,如果您提交到任何存储库,这会暴露您的密码并成为问题。

export PGPASSWORD=password

答案3

如果您可以作为用户 postgres 运行 psql,最有用的解决方案是修改 pg_hba.conf,以便通过 localhost/socket 连接的 Unix 用户 postgres 无需任何密码或外部文件即可进行身份验证。在文件的顶部插入:

local all postgres  peer

这一点,TBMI是默认的。也许有人认为当他们删除这条线时他们很聪明或更安全,我不知道。您还可以使用类似的东西来进行监控服务:

local zabbix zabbix peer

您为其创建一个名为“zabbix”的用户名和数据库。

相关内容