Tera Term マクロでコマンドを実行しよう
ネットワーク作業において Tera Term マクロを使用する目的はほとんどがネットワーク機器の CLI コマンドログの取得です。このため、Tera Term マクロでコマンドを実行する処理は最も重要な要素の一つです。
この記事では Tera Term マクロのコマンド実行処理に関わる wait コマンドと sendln コマンドについて説明します。
動作確認環境
- Tera Term Version 4.104
Tera Term マクロで機器コマンドを実行する流れ
Tera Term マクロで機器コマンドを実行するためには以下の処理を行います。
- 特定の文字列がコンソール上に表示されるのを待つ
- 実行したいコマンドを送信する
①を行うのが wait コマンド、②を行うのが sendln コマンドです。以下でそれぞれ説明します。
特定の文字列を待つ wait コマンドの使い方
Tera Term マクロでコマンドを実行する際、そのコマンドを実行すべきタイミングでコマンドを送信する必要があります。コマンドの実行タイミングは wait コマンドを使用して調整します。wait コマンドを使用すると、指定した文字列がコンソール上に表示されるまでマクロ処理を停止することができます。
wait コマンドの使用方法は以下の通りです。
- wait "<文字列>"
- <文字列>:待ち受ける文字列。この文字列を受信するまでマクロ処理を停止する
- 文字列の代わりに文字列を格納した変数を指定することも可能
以下は Cisco 機器の特権EXECモードのプロンプト「MyRouter#」が表示されるのを待ち、表示されたらメッセージを表示するマクロです。
wait "MyRouter#"
messagebox "プロンプトが表示されました" "メッセージ"
wait に与える文字列を以下のように変数にすることもできます。
Prompt = "MyRouter#"
wait Prompt
messagebox "プロンプトが表示されました" "メッセージ"
コマンドを送信する sendln の使い方
Tera Term マクロでコマンドを実行(送信)するために使用するコマンドは sendln です。sendln は指定した文字列を末尾に改行を付加して送信します。使い方は以下の通りです。
- sendln "<文字列>"
- <文字列>:送信する文字列。この文字列の末尾に改行が付加された上で送信される
- 文字列の代わりに文字列を格納した変数を指定することも可能
似たコマンドで、末尾に改行を付加しない send というコマンドもありますが、ほとんどの場合は sendln を使うことになるでしょう。
sendln は前項で説明した wait とセットで使用されます。例えば以下のような使い方をします。
- ログインパスワード入力を促す「Password:」という文字列を wait で待ってから、sendln でパスワードを送信する
- 特権EXECモードのプロンプト「<ホスト名>#」という文字列を wait で待ってから、sendln で実行コマンドを送信する
wait と sendln の使用例
Telnet 接続後にユーザ認証する
Cisco 機器で Telnet 接続でユーザ認証が設定されている場合、Telnet 接続後に以下のような流れでプロンプトが表示されます。
- 「Username:」と表示される
- ユーザ名入力後、「Password:」と表示される
- パスワード入力後、認証に成功するとユーザEXECモードのプロンプトが表示される
User Access Verification
Username: admin
Password:
MyRouter>
この流れを考慮すると、以下のようにマクロを作成すれば良いことになります。
- Telnet 接続する connect コマンドを記述する
- 「Username:」を wait で待つ
- ユーザ名を sendln で送信する
- 「Password:」を wait で待つ
- パスワードを sendln で送信する
これをマクロにすると以下のようになります。
;;(1)Telnet接続
connect "10.1.1.1:23 /nossh /T=1"
;;(2)「Username:」を wait で待つ
wait "Username:"
;;(3)ユーザ名を sendln で送信する
sendln "admin"
;;(4)「Password:」を wait で待つ
wait "Password:"
;;(5)パスワードを sendln で送信する
sendln "admin"
更に、ユーザEXECモードから特権EXECモードに移行する処理を含めたい場合は以下を追加します。
;;(6)ユーザEXECモードのプロンプトを wait で待つ
wait "MyRouter>"
;;(7)enable を sendln で送信する
sendln "enable"
;;(8)「Password:」を wait で待つ
wait "Password:"
;;(9)enable パスワードを sendln で送信する
sendln "admin"
Cisco 機器で show コマンドを実行する
Cisco 機器を対象に、特権EXECモードで show コマンドを実行するマクロを作ります。この場合、実行したいコマンド一つにつき以下の処理をセットで記述します。
- 特権EXECモードのプロンプトを wait で待つ
- マクロの受信バッファをクリアする
- 実行コマンドを sendln で送信する
②のマクロの受信バッファクリアについては、マクロが機器から受信した文字列は受信バッファに保存されますが、この受信バッファに情報が残っていると誤動作をする可能性があるため安全のためにコマンド実行の前にバッファのクリア処理を挟んでおくことを当サイトでは推奨します。受信バッファのクリアは以下コマンドで実行できます。
- flushrecv
さて上記を踏まえて機器のコマンドを1つ実行する処理は以下のようになります。
;;(1)特権EXECモードのプロンプトを wait で待つ
wait "MyRouter#"
;;(2)マクロの受信バッファをクリアする
flushrecv
;;(3)実行コマンドを sendln で送信する
sendln "show version"
上記(1)~(3)のセットを実行したいコマンド分だけ記述します。以下は3つのコマンドを実行するマクロ例です。
- terminal length 0
- show version
- show running-config
wait "MyRouter#"
flushrecv
sendln "terminal length 0"
wait "MyRouter#"
flushrecv
sendln "show version"
wait "MyRouter#"
flushrecv
sendln "show running-config"
より使いやすいマクロを作成することも可能
この記事では wait と sendln の基本的な使い方を説明しました。ただ、実際にマクロを作成・使用する場合、この記事で説明している通りにマクロを作成すると手間がかかる、また再利用時の編集にも手間がかかるということが分かるかと思います。
より作成も再利用もしやすいマクロを作成するテクニックが存在します。このためにはいくつかの基礎知識を習得する必要があります。これについては他の記事で順次説明したいと思います。
まとめ
- Tera Term マクロで機器コマンドを実行する場合 wait で文字列を待ち sendln でコマンドを送信する
- 受信バッファのクリア(flushrecv) を行い誤動作を予防しよう
- コマンド実行の際はページャー機能をOFFにしよう
- 基礎知識
- コマンド解説
- ログイン
- コマンド実行
- ログ保存
- ファイル・フォルダ操作
- 文字列操作
- 変数関連
- マクロのモジュール化
- テクニック
- サブルーチン
- オリジナルマクロ
コメント