psql:fe_sendauth:未提供密码


19

我有一个正在运行的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

但是,似乎没有任何一种方法有效。有谁有想法吗?我忘了做某事吗?


1
试试吧sudo su -c psql postgres psql ...
2013年

.pgpass你的 home目录?不属于postgres用户的吗?
Milen A. Radev 2013年

是的,它在我的主目录中,即/ home / server2 /
阿里巴巴2013年

Answers:


15

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了用于peer认证local的用户连接postgres

您可以使用一个.pgpass文件,但它一定是.pgpass你的用户的sudo“荷兰国际集团,而不影响用户你sudoING ; ~postgres/.pgpass在这种情况下就需要。想一想:psql运行时postgres不知道您是通过sudo您的帐户运行的,也不知道您的用户帐户是什么,即使这样做了,也没有作为用户postgres对的读取权限~youruser/.pgpass

此外,-w与相同--no-password。两者都没有意义。


2
您还可以设置sudo以允许您使用-E保留环境(包括PGPASSWORD)的选项。这样可以防止它显示在进程列表中。
fukawi2
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.