web-dev-qa-db-ja.com

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

それにもかかわらず、どの方法も機能しないようです。誰かが何か考えを持っていますか?私は何かをするのを忘れていますか?

19
alibaba

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がこれを許可するかどうかは、サイトで有効なセキュリティポリシーによって異なります。

コマンドライン履歴とプロセスリストでパスワードを公開するため、このアプローチはお勧めしません。 peerユーザーlocal接続のpostgres認証の認証には、.pgpassファイルを使用するか、できればpg_hba.confを設定することをお勧めします。

.pgpassファイルを使用できますが、Sudoingしているユーザーではなく、Sudo 'ingしているユーザーの.pgpassである必要があります- from;この場合は~postgres/.pgpassである必要があります。考えてみてください:psqlとして実行しているpostgresは、アカウントからSudoを介して実行したことを知らず、ユーザーアカウントが何であるかを知っていません。ユーザーpostgresから~youruser/.pgpassへの読み取り権限がありませんでした。

また、-w--no-passwordと同じです。両方を指定しても意味がありません。

15
Craig Ringer

これは、データベースのパスワードが指定されていない場合に発生します。

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

0

私も.pgpassファイルを設定しようとしましたホームディレクトリにですが、役に立ちません:

psqlコマンドを実行するアカウントのホームディレクトリに.pgpassファイルを作成する必要があります。つまり、あなたのアカウントではなくpostgresアカウントです。

psql -d pg_ldap -w-no-password ...

これらのオプションも混乱するかもしれません。

どちらも同じ意味です。具体的には、「seパスワードを使用しないでください」です。

これらを削除することをお勧めします。 psqlはパスワードが必要であることを認識しますが、正しく配置された.pgpassファイルを検出し、パスワードにaskingの代わりにそれを使用する必要があります。

そしてもちろん、あなたのpostgresアカウントのパスワードはreally "postgres"ではありませんか? :-)

0
Phill W.