稼働中の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
それにもかかわらず、どの方法も機能しないようです。誰かが何か考えを持っていますか?私は何かをするのを忘れていますか?
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
ファイルを使用できますが、Sudo
ingしているユーザーではなく、Sudo
'ingしているユーザーの.pgpass
である必要があります- from;この場合は~postgres/.pgpass
である必要があります。考えてみてください:psql
として実行しているpostgres
は、アカウントからSudo
を介して実行したことを知らず、ユーザーアカウントが何であるかを知っていません。ユーザーpostgres
から~youruser/.pgpass
への読み取り権限がありませんでした。
また、-w
は--no-password
と同じです。両方を指定しても意味がありません。
これは、データベースのパスワードが指定されていない場合に発生します。
default="postgres://postgres:[email protected]:5432/DBname"
私も.pgpassファイルを設定しようとしましたホームディレクトリにですが、役に立ちません:
psqlコマンドを実行するアカウントのホームディレクトリに.pgpassファイルを作成する必要があります。つまり、あなたのアカウントではなくpostgresアカウントです。
psql -d pg_ldap -w-no-password ...
これらのオプションも混乱するかもしれません。
どちらも同じ意味です。具体的には、「seパスワードを使用しないでください」です。
これらを削除することをお勧めします。 psqlはパスワードが必要であることを認識しますが、正しく配置された.pgpassファイルを検出し、パスワードにaskingの代わりにそれを使用する必要があります。
そしてもちろん、あなたのpostgresアカウントのパスワードはreally "postgres"ではありませんか? :-)