Postgresコマンドを実行する必要がある非対話型スクリプトを書いています。スクリプトはroot
またはSudo
権限を持つユーザーによってのみ実行され、postgresコマンドはpostgresqlでpostgres
ユーザーとして実行する必要があります。問題は、postgresqlが常に(私が知る限り)対話的にパスワードの入力を求めるか(つまり、pqsl -U postgres -W
)、パスワードをまったく受け入れない(つまり、psql -U postgres -w
)ことです。 mysqlがmysql -u user -p password
を許可するのと同じように、コマンドラインでパスワードを渡したいと思います。 postgresでこれを行うにはどうすればよいですか?
同じことを行うには2つの方法があります。
アプローチ1:
ユーザー(スクリプトを実行するユーザー)のホームディレクトリに.pgpass
ファイルを追加します。
$ cat /home/user/.pgpass
hostname:port:database:user:password
$ chmod 600 /home/user/.pgpass
上記を追加した後、使用するスクリプトにパスワードを追加する必要はありません。直接接続します。
アプローチ2:
シェルスクリプトに以下を追加します。ただし、これによりパスワードが公開され、リポジトリにコミットする場合に問題が発生します。
export PGPASSWORD=password
Psqlをユーザーpostgresとして実行できる場合、最も有用な解決策はpg_hba.confを変更して、localhost/socketを介して接続するUnixユーザーpostgresがパスワードまたは外部ファイルなしで認証されるようにすることです。ファイルの先端に、これを挿入します。
local all postgres peer
これは、TBMIがデフォルトです。おそらく誰かが、この行idkを削除したときに、賢い、またはより安全だと思ったのでしょう。次のようなものをモニトロ化サービスに使用することもできます。
local zabbix zabbix peer
「zabbix」という名前のユーザー名とデータベースを作成します。