それっぽい技術メモ

UNIXからpythonまで、技術系メモ。知識は人類の共有財産です。

対話型を対話しない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

||<

って言われます。