シェルにおけるexpectコマンドってなに?

shell
クロネコ先生
クロネコ先生

シェルにおける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、passwordSSH接続に必要な情報(ホスト名、ユーザー名、パスワード)を設定します。
spawnexpectスクリプト上で新たなプロセスを生成するコマンドです。
今回はssh接続を行うにあたり、プロセスを生成しています。
expect & sendパスワードが表示されるのを待ち、その後にパスワードを送信します。
interact対話モードを開始し、接続後にコマンドを手動で入力できる状態にします。
各コマンドの説明
まとめ

このようにすることで、SSH接続などの対話的な処理を自動化することができます。
シェルスクリプト自体、シェルコマンドを自動化するために作成しているため、SSH接続などの対話処理も自動化することは必須になりますので、expectコマンドについてはぜひこの機会に覚えておきましょう。

コメント

タイトルとURLをコピーしました