psql:fe_sendauth:未提供密码

ali*_*aba 22 postgresql ubuntu-12.04

我有一个正在运行的 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"
Run Code Online (Sandbox Code Playgroud)

当我运行 bash 脚本时,出现以下错误:

psql: fe_sendauth: no password supplied
Run Code Online (Sandbox Code Playgroud)

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

*:*:*:postgres:postgres
Run Code Online (Sandbox Code Playgroud)

我已经运行了以下命令:

sudo chmod 0600 .pgpass
Run Code Online (Sandbox Code Playgroud)

然而,似乎任何方法都不起作用。有谁有想法吗?我是不是忘记做某事了?

Cra*_*ger 17

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"
Run Code Online (Sandbox Code Playgroud)

是否sudo允许这将取决于您站点上有效的安全策略。

我不推荐这种方法,因为它会在命令行历史记录和进程列表中公开密码。最好使用.pgpass文件,或者最好设置pg_hba.confpeerlocal来自用户的连接进行身份验证postgres

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

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

  • 你也可以设置 sudo 来允许你使用 `-E` 选项来保护你的环境(包括 `PGPASSWORD`)。这可以防止它显示在进程列表中。 (2认同)