expectを利用してscpを自動化するshツール。
パスフレーズなしscpでいいのだろうが、
どうしてもパスフレーズを入力しなければいけない場合用に。
エラー処理などしっかりと実施していないが、とりあえずこれで動作する。
引数は5つ。
/usr/local/bin/scp.sh [HOST] [USER] [PASSWORD] [SOURCE] [DEST]
と実行すればよい。
#!/bin/sh
if [ $# != 5 ];then
echo './scp.sh [HOST] [USER] [PASSWORD] [SOURCE] [DEST]'
exit 1
fi
HOST=$1
USER=$2
PASSWORD=$3
SOURCE=$4
DEST=$5
TIME=800
/usr/bin/expect -c"
set timeout ${TIME}
spawn /usr/bin/scp -r ${USER}@${HOST}:${SOURCE} ${DEST}
expect {
\"Are you sure you want to continue connecting (yes/no)?\" {
send \"yes\n\"
expect \"password:\"
send \"${PASSWORD}\n\"
} \"password:\" {
send \"${PASSWORD}\n\"
}
}
expect
"
exit 0
expect内でinteractも使えるけれど、
これを使うと制御端末のないcron経由の実行ができないので注意を。
(関連)
rubyのexpectモジュールを使って任意のコマンドを発行
sshで多段接続をしてscp