対話型を対話しないLinux expect de scp
リプレイス前は、サーバ間で共有ディスクをそれぞれマウントしていたので、cpコマンドでサクッとコピーができたけど、AWSに持っていったらそれぞれのサーバにEBSでディレクトリがきられてる!
コピーコマンド使えない!!
で、scpを使ってみました。
コピー元でシェルを動かすので、こんなコマンドでサクッとコピー。
>||
scp -P 10022 /home/test/sec-cp.dat test@192.168.1.1:/tmp/sec-cp.dat
||<
scpはsshのポートを使うので、オプション -P でポート番号10022を指定しています。
コピー元が /home/test/sec-cp.dat
コピー先が test@192.168.1.1;/tmp/sec-cp.dat
コピー先のユーザはtestです。
でも、困った事が。
scpは対話型コマンドなので、実行すると?
password:?って聞いてくる。
.....
しょうがないので、expectを使ってみました。
>||
expect -c "
spawn scp -P 10022 /home/test/sec-cp.dat test@192.168.1.1:/tmp/sec-cp.dat
expect "passwd:\n"
send "passworddesu"
"
||<
spawnに続いて、実行したいコマンドを。
expectに続いて、対話で表示される文字列を入力します。
尚、spawnで実行したコマンドがエラー吐くと、
>||
spawn_id: spawn id exp6 not open
||<
って言われます。