svnsync syncの自動同期をずーとやりたかったのだけど、--source-passwordや、--sync-passwordオプションを付けてもRSA認証の仕組み入れてみたりしても、パスフレーズの省略が出来なくて困っていた。
そこで方向転換して勝手にパスワード入力してくれないものか?と探して見つけたのがexpectだ。
簡単に各コマンドの説明を貼っておく。
set timeout:expectのタイムアウト値はデフォルトで10秒になっているので10秒以上かかると思われる処理の場合 set timeout -1 でタイムアウトしないようにします。
spawn:自動で実行したいコマンドを指定。
expect:指定された文字列(「”」に囲まれた文字)と標準入力のデータとを正規表現で比較し、一致するまで以降の命令を実行しません。
send:指定された文字列(「”」に囲まれた文字)を先に実行したコマンドのジョブに送信します。
interact:自動実行を終了。実行ジョブの標準入出力をキーボードと画面にします。
実際に作ったシェルが以下。
#!/usr/bin/expect
#タイムアウト
set timeout 10
# svnsync起動
spawn svnsync sync svn+ssh://svnuser@192.168.XXX.YYY/repos
#パスワード入力
expect "svnuser@192.168.XXX.YYY's password:"
send "sync-password\n"
expect "svnuser@192.168.WWW.ZZZ's password:"
send "source-password\n"
interact
このシェルを実行してみると。。。出来た。。。嬉しい。。。
これをCronに登録すればやっと自動化完了です。