psql:fe_sendauth:未提供密码

psql:fe_sendauth:未提供密码

我有一个正在运行的 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不保留大多数环境变量。如果您想为在 下运行的命令指定环境变量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进行身份验证。localpostgres

您可以使用.pgpass文件,但它必须是您要访问的.pgpass用户的文件,而不是您要访问的用户的文件sudosudo;在这种情况下它需要这样做~postgres/.pgpass。想想看:psql以 身份运行postgres并不知道您是从您的帐户运行的sudo,它不知道您的用户帐户是什么,即使它知道,它也没有以用户身份读取 的postgres权限~youruser/.pgpass

此外,-w与 相同--no-password。没有必要同时指定两者。

答案2

如果没有提供数据库密码,就会发生这种情况。

default="postgres://postgres:[email protected]:5432/DBname"

答案3

我甚至尝试配置 .pgpass 文件在我的主目录中但无济于事:

您需要在运行该命令的账户的主目录中创建 .pgpass 文件查询语言命令,即PostgreSQL 的帐户,不是你的!

psql-d pg_ldap-w --无密码...

我认为这些选项可能也会造成混淆。

两者的意思是一样的,具体来说就是“不要使用密码”。

我建议删除这些。 psql 会承认需要密码,但应该检测正确放置的 .pgpass 文件并使用它来代替询问输入密码。

当然,你的 postgres 账户密码不是真的“postgres”,是吗?:-)

相关内容