機器のプロンプトを待ち受ける
Tera Term マクロで接続先機器の CLI コマンドを操作する際、必ず機器 CLI のプロンプトを wait で待ち受けた上でコマンドを送信することになります。単純な方法としては wait コマンドで想定されるプロンプト文字列をそのまま指定しますが、この方法だと保守性が高くありません。
当サイト推奨のより汎用的で保守性の高いプロンプトの指定方法があるためその方法を紹介します。
プロンプトを待ち受ける際の複雑さ
ネットワーク機器の CLI プロンプトは一定ではなく、CLI モードや機器状態によってプロンプトが変化する場合があります。
Cisco 機器でいうと、一般的なスイッチやルータについてはユーザEXECモードや特権EXECモードまでであればモードごとに一定のプロンプトのため特に問題はありませんが、以下のような場合はプロンプトが一定ではありません。
- コンフィグモードまで移行してコマンドを実行する場合
- ファイアウォールの ASA や Firepower が対象で、HA 構成でありプロンプトに状態を表示する設定になっている場合
この様な場合に Tera Term マクロを作成する際には、単純に作成するとその時々の想定プロンプトを確認してマクロの wait コマンドで指定することになりますが、これは非常に手間であり保守性が低いことになります。
正規表現で文字列を待ち受ける waitregex を使用する
上記のような問題に対応する方法として、waitregex というコマンドを使用する方法があります。
waitregex は wait と同じように文字列を待ち受けるコマンドですが、waitregex は正規表現で待ち受ける文字列を指定することができます。使い方は以下の通りです。
- waitregex <待ち受ける正規表現> [<待ち受ける正規表現②> ...]
- <待ち受ける正規表現>:この正規表現に合致する文字列を受信するまで次の処理を待つ
- [<待ち受ける正規表現②> ...]:オプションで2つ目以降の待受け対象正規表現を指定可能
- 正規表現は正規表現ライブラリ鬼車に基づくものを使用可能
Cisco 機器のユーザEXECモード用の正規表現
Cisco 機器のユーザEXECモードのプロンプトを待ち受けるための当サイト推奨の正規表現は以下の通りです。
- ^ホスト名.*>
- 正規表現の意味としては、「行頭がホスト名で、ホスト名後に任意の文字列があった後に「>」が現れるような文字列」
- 「^」:行頭を意味します
- 「.*」任意の文字の0回以上の繰り返しを意味します
上記のような正規表現を用いることで以下のメリットがあります。
- ホスト名が行頭にある場合に限られるため、誤一致を減らせる
- ホスト名と「>」の間に何らかの文字列が入るようなプロンプトにも対応できる
- ASA、Firepower の HA 構成にも対応できる
Cisco 機器の特権EXECモード・コンフィグモード用の正規表現
Cisco 機器の特権EXECモード、及び各種コンフィグモードのプロンプトを待ち受けるための当サイト推奨の正規表現は以下の通りです。
- ^ホスト名.*#
- 正規表現の意味としては、「行頭がホスト名で、ホスト名後に任意の文字列があった後に「#」が現れるような文字列」
- 「^」:行頭を意味します
- 「.*」任意の文字の0回以上の繰り返しを意味します
上記のような正規表現を用いることで以下のメリットがあります。
- ホスト名が行頭にある場合に限られるため、誤一致を減らせる
- ホスト名と「#」の間に何らかの文字列が入るようなプロンプトにも対応できる
- ASA、Firepower の HA 構成にも対応できる
- 各種コンフィグモードにも対応できる
waitregex を使用したマクロ例
;; waitregex用の正規表現を変数に格納
hostname = 'MyRouter'
sprintf2 prompt_user '^%s.*>' hostname
sprintf2 prompt_privilege '^%s.*#' hostname
;; ユーザEXECモードを待ち受ける場合のwaitregex
waitregex prompt_user
;; 特権EXECモードを待ち受ける場合のwaitregex
waitregex prompt_privilege
まとめ
- 正規表現を待ち受けるためには waitregex コマンドを使用する
- waitregex では鬼車に基づく正規表現を使用可能
- CLI プロンプトの待受けのために waitregex を使用することで汎用的なマクロを作成できる
- 基礎知識
- コマンド解説
- ログイン
- コマンド実行
- ログ保存
- ファイル・フォルダ操作
- 文字列操作
- 変数関連
- マクロのモジュール化
- テクニック
- サブルーチン
- オリジナルマクロ
コメント