tjinjin's blog

インフラ要素多めの個人メモ

対話的なコマンドの自動実行(expect)

ssh接続などで鍵登録をしていない限りpassword認証を求められてしまい、スクリプトの自動実行ができません。いろいろ悩んでいたときにexpectコマンドを知ったのでメモ。

シェル実行時にヒアドキュメントを使って引数を渡すことができますが、ssh接続時のパスワード認証などでは、利用できません。どうやら、ヒアドキュメントは標準入力から値を渡すが、パスワード認証は端末からの値を受け取るようです。そこで疑似端末を起動させてそこから値を入力するのがexpectらしい。うまく使えばいろいろ自動化できそうです。

 

■インストール方法

①yumを使ってインストール(簡単)

yum install expect 

②サイトからダウンロードし手動インストール

下記サイトを参考

http://www.nognog.com/techmemo/Expect_Install_HOWTO.php

※tkの方はインストールしなくても動きました。

今回はどちらのパターンでもやってみました。yum使える環境なら、楽なのでお勧めです。

 

■利用方法

いろいろできますが、ssh接続を試しました。

===============================

#!/bin/sh

expect -c "

set timeout 10

spawn ssh 192.168.18.130

expect \"root@*'s password\:\"

send \"password\n\"

expect \"*root@centos*\"

send \"echo aa\n\"

===============================

ssh接続して、コマンドをたたくだけですね。

expect ~でどういった文字列が表示されるか(正規表現も可)を指定して、

その文字が表示されたらsend ~で指定したものを入力する。分岐表現も使えるようなです。

 

参考サイト

http://www.softel.co.jp/blogs/tech/archives/140

いろいろな情報がありましたので、expectでググればいろいろ見つかると思います。