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 ...代わりに試してください。
フラップ

.pgpassであるあなたのホームディレクトリ?postgresユーザーのものではありませんか?
マイレンA.ラジェフ

はい、それは私のホームディレクトリにあります、すなわち/ home / server2 /
alibaba

回答:


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ファイルを使用するか、できればuserからの接続の認証pg_hba.conf用に設定することをおpeer勧めlocalしますpostgres

あなたが使用できる.pgpassファイルを、それがなければなりません.pgpass、あなたがしているユーザーのsudoではなく、ユーザーにINGの」をあなたしているsudoING から~postgres/.pgpassこの場合に必要です。それについて考える:psqlとして実行しているpostgresあなたが経由して、それを実行した知らないsudo自分のアカウントから、それは自分のユーザーアカウントが何であるかを知らない、そしてそれがなかった場合でも、それがユーザーとして読み取り権限を持っていないpostgres~youruser/.pgpass

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


2
また、sudoをセットアップし-Eて、環境を保持するオプション(を含むPGPASSWORD)を使用できるようにすることもできます。これにより、プロセスリストに表示されなくなります。
fukawi2
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.