以下の様に、expect を使用して、SSH や SCP を使用したときのパスワード入力を
自動化するシェルスクリプトを用意。
ローカルの /var/tmp/test_from/*.txt をごそっと SCP する動作期待しました。
$ cat test.sh#!/bin/bash
# expect の function
func_expect (){
expect -c "
spawn $1
expect {
\"Are you sure you want to continue connecting (yes/no)?\" {
send \"yes\r\"
expect \"password:\"
send \"hogehoge\r\"
} \"password:\" {
send \"hogehoge\r\"
} \"root@localhost's password:\" {
send \"hogehoge\r\"
}
}
interact
"
}
# ファイルを SCP で送信
func_expect "scp /var/tmp/test_from/*.txt root@192.168.1.1:/var/tmp/test_to"
実行してみるとこんな感じにエラーになる
spawn scp /var/tmp/test_from/*.txt root@192.168.1.1:/var/tmp/test_toroot@192.168.1.1's password:
/var/tmp/test_from/*.txt: No such file or directory
Killed by signal 1.
/var/tmp/test_from/*.txt が無いと言われてるけど、
実際に手で実行すると行ける...なぜだ...
ぐぐってみると以下のサイトを発見
http://stackoverflow.com/questions/7487964/bash-expect-scp-problem-on-multiple-files
ワイルドカードをうまく認識してくれない?的な?
このサイトに習って spawn で呼び出されるところを以下のようにしたらいけた
func_expect "sh -c \"scp /var/tmp/test_from/*.txt root@192.168.1.1:/var/tmp/test_to\""