RECOMMEND

ハッカーと画家
ハッカーと画家
プログラマ必読。→感想


C言語ポインタ完全制覇
C言語ポインタ完全制覇
C言語 対ポインタ最強兵器。
感想

COUNTER

MONTHLY

CATEGORIES

RECENT ENTRIES

RECENT COMMENTS

RECENT TRACKBACKS

twitter

Twitterボタン

APPENDIX

sugarball

こまごまと、プログラミング関係のtipsを。

[スポンサー広告]スポンサーサイト 

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[UNIX]scpでパスワードを自動化(cygwinでexpect) 

UNIXやLinuxでscpコマンドを使う場合、パスワードの入力を求められます。こんな感じで。
$ scp data.txt user@192.168.0.3:/tmp/
user@192.168.0.3's password:

で、これが結構曲者で、スクリプトなんかでscpによるファイルコピーを自動化したい場合、一筋縄ではいきません。というのも、毎回パスワードを聞かれてしまうので、ヒアドキュメントを使っても自動的にパスワードを入力することができません。

そこで登場するのが、expect というコマンドです。expectコマンドは、対話型によるコマンドライン入力の自動化を可能にするコマンドです。例えば、suコマンドによるユーザの変更した場合のパスワードの入力まで自動的に行うことが可能です。
(参考:Manpage of EXPECT

で、本題のscpでパスワードを自動化する方法は以下のとおりです。


クライアント(コピー元マシン)からサーバ(コピー先マシン)にscpコマンドによるコピーを行うという状況で説明します。

クライアントは、windowsでもUNIXでもLinuxでも問題ありません。scpとexpectが使えることが前提です。クライアントにwindowsマシンを使用する場合は、cygwinをscpとexpectパッケージを含めた形でインストールすると良いでしょう。

では、data.txtをscpコマンドでサーバにコピーするスクリプトを紹介します。
auto_scp.sh

#!/bin/sh
expect -c ”
spawn scp data.txt user@192.168.0.3:/tmp/
expect {
¥”Are you sure you want to continue connecting (yes/no)?¥” {
send ¥”yes¥r¥”
expect ¥”password:¥”
send ¥”(パスワード)¥r¥”
} ¥”password:¥” {
send ¥”(パスワード)¥r¥”
}
}
interact

で、このauto_scp.shを実行するとサーバの/tmpディレクトリに、data.txtがコピーされます。(「¥r」を半角で入力すると、fc2ブログでは勝手に改行されてしまいます…そんな事情もあるので、「”」と「¥」は全部半角に直してください)

実行すると、こんな感じになります。
$ ./auto_scp.sh
spawn scp data.txt user@192.168.0.3:/tmp/
user@192.168.0.3's password:
data.txt 100% 37 0.0KB/s 00:00



ちなみに、対象のサーバに初めてsshやscpで接続する場合、以下のメッセージが表示されます。
$ ./auto_scp.sh
spawn scp data.txt user@192.168.0.3:/tmp/
The authenticity of host '192.168.0.3 (192.168.0.3)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)?

対象のサーバに初めてsshやscpで接続する場合には、「対象のサーバを知ってるサーバのリストに追加しますよ?」ってことでyes/noを聞かれているので、「yes」と入力することが必要です。2回目以降だと、このyes/noの入力を求められることはありません。(すでに知っているサーバなので)

ちなみに、上で紹介したauto_scp.shは初めての接続の場合でも、それ以降の問題なく使えます。興味がある方は、Manpage of EXPECTを読んでexpectの仕組みを理解すると良いでしょう。


コメント

参考になりました

ありがとうございます。expect コマンドを初めて知りました。大変参考になりました。

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://stackoftips.blog79.fc2.com/tb.php/32-595742f9

«  | HOME |  »

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。