LoginSignup
0
0

More than 5 years have passed since last update.

expectコマンドを使用してpg_dumpのパスワード入力を自動化する

Posted at

はじめに

環境は以下のとおり
- Centos6.7
- PostgreSQL9.4.6

やりたいこと

以下のPostgreSQLのダンプ処理をシェルで実行させたい。

sudo pg_dump -a -Fc -h xxx.xxx.xxx.xxx -p 5432 -U db_user sample -n public -f /tmp/dump.sql

expectコマンドによる実現

上記のダンプ処理を実行する場合、バッチ実行ユーザ(batch_user)とPostgreSQLユーザ(db_user)の両方のパスワードの入力が必須となる。

[sudo] password for batch_user:
パスワード:

このパスワード入力について、省略もしくは自動入力化する必要がある。

PostgreSQLユーザのパスワードを省略したい場合、パスワードファイル を使用するやりかたもあるが、今回はバッチ実行ユーザのパスワード入力も省略させたい。

なので今回は、以下のようにexpectコマンドを使用し、2つのパスワードの自動入力を実現させた。

/tmp/auto_dump.sh
#!/bin/bash

#バッチ実行ユーザのパスワード
USER_PWD="xxx"
#PostgreSQLユーザのパスワード
DB_USER_PWD="yyy"

#dump実行
expect -c "
set timeout 5
spawn sudo pg_dump -a -Fc -h xxx.xxx.xxx.xxx -p 5432 -U db_user sample -n public -f /tmp/dump.sql
expect \"\[sudo\] password for batch_user:\"
send \"${USER_PWD}\n\"
expect \"パスワード:\"
send \"${DB_USER_PWD}\n\"
sleep 2
expect \"\n\"
send \"exit\n\"
"

実行してみる

# ダンプシェルの実行
sh /tmp/auto_dump.sh
spawn sudo pg_dump -a -Fc -h xxx.xxx.xxx.xxx -p 5432 -U db_user sample -n public -f /tmp/dump.sql
[sudo] password for batch_user:
パスワード:

# ダンプファイルの確認
ls /tmp
dump.sql
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0