クロネコ先生
シェルにおけるexpectコマンドについて解説します。
結論
expectは、対話処理(SSH接続やFTP接続など)を自動化するためのコマンドです。
上記のようなコマンドスクリプトをexpectスクリプトと呼びます。
まず、例となるシェルスクリプトを紹介します。
# タイムアウトの設定(秒)
set timeout 10
# SSH接続に必要な情報を設定
set hostname "サーバーのホスト名"
set username "ユーザー名"
set password "パスワード"
# SSH接続を開始
spawn ssh $username@$hostname
# パスワードのプロンプトが表示されるのを待ち、パスワードを送信
expect "password:"
send "$password\r"
# 対話モードを開始(接続後、コマンドを手動で入力できる状態にする)
interact
今回のスクリプトではSSH接続を例としており、以下のような流れで動作します。
timeout | タイムアウト時間を設定します。 今回の場合、SSH接続の応答のタイムアウト時間を設定しています。 |
hostname、username、password | SSH接続に必要な情報(ホスト名、ユーザー名、パスワード)を設定します。 |
spawn | expectスクリプト上で新たなプロセスを生成するコマンドです。 今回はssh接続を行うにあたり、プロセスを生成しています。 |
expect & send | パスワードが表示されるのを待ち、その後にパスワードを送信します。 |
interact | 対話モードを開始し、接続後にコマンドを手動で入力できる状態にします。 |
まとめ
このようにすることで、SSH接続などの対話的な処理を自動化することができます。
シェルスクリプト自体、シェルコマンドを自動化するために作成しているため、SSH接続などの対話処理も自動化することは必須になりますので、expectコマンドについてはぜひこの機会に覚えておきましょう。
コメント