Cisco 1812Jのshow runをワンクリックで取得する|Tera Termマクロ+バッチファイル

ネットワーク

Ciscoルータの設定を確認するために、毎回Tera Termで機器へログインして、

terminal length 0
show run

と入力してログを取得する作業は、台数が少なくても意外と手間がかかります。

そこで今回は、Tera Termマクロ(TTLファイル)とWindowsのバッチファイルを組み合わせて、Cisco 1812Jのshow runをワンクリックで取得する方法を紹介します。

バッチファイルをダブルクリックするだけで、Cisco 1812JへSSH接続し、show runを実行してログファイルとして保存できます。

この記事でできること

今回作成する仕組みでは、以下の処理を自動化します。

  1. バッチファイルをダブルクリック
  2. Tera Termマクロを起動
  3. Cisco 1812JへSSH接続
  4. ログファイルを作成
  5. terminal length 0を実行
  6. show runを実行
  7. コマンド結果をログファイルへ保存
  8. ログ取得終了
  9. Cisco 1812Jからログアウト
  10. 完了メッセージを表示

取得したログファイルには日付を付けるため、いつ取得した設定なのかも分かりやすくなります。


使用するもの

今回使用するのは以下の2つです。

  • Tera Term
  • Windowsのバッチファイル

作成するファイルは次の2つです。

show_run.ttl
show_run.bat

TTLファイルにCisco機器へ接続してコマンドを実行する処理を記述し、バッチファイルからTTLファイルを起動します。


動作イメージ

今回作成する仕組みは、以下のような流れです。

show_run.bat
    ↓
Tera Term Macro
    ↓
Cisco 1812JへSSH接続
    ↓
ログ開始
    ↓
terminal length 0
    ↓
show run
    ↓
ログ終了
    ↓
exit
    ↓
完了メッセージ

これなら、毎回Tera Termを起動して接続先を入力し、コマンドを手入力する必要がありません。


Tera Termマクロを作成する

まず、Tera Termマクロファイルを作成します。

テキストエディタを開き、以下の内容をコピーして貼り付けます。

ファイル名は、例えば以下のようにします。

show_run.ttl

拡張子が.txtにならないように注意してください。

TTLファイル

;========================================
; 接続情報
;========================================
USERNAME = 'XXX'
PASSWORD = 'XXX'

; ===== 機器リスト =====
strdim HOST 1
strdim NAME 1

HOST[0] = '192.168.10.20'
NAME[0] = 'RT1_show_run'
;========================================

; ===== 現在日付取得 =====
getdate month '%m'
getdate datestr '%Y%m%d'

; ===== ログの保存先をTTLファイルのカレントディレクトリに指定 =====
getdir logfilepath

; ===== SSH接続情報生成 =====
msg = HOST[0]
strconcat msg ':22 /ssh /auth=challenge /user='
strconcat msg USERNAME
strconcat msg ' /passwd='
strconcat msg PASSWORD

; ===== ログファイル名生成 =====
sprintf2 logfile "%s\%s_log_%s.txt" logfilepath NAME[0] datestr

; ===== Ciscoへ接続 =====
connect msg

; ===== ログ開始 =====
logopen logfile 0 0

; ===== プロンプト待機 =====
wait '#'

; ===== ページング停止 =====
sendln 'ter len 0'
wait '#'

; ===== show run実行 =====
sendln 'show run'
wait '#'

; ===== ログ終了 =====
logclose

; ===== ログアウト =====
sendln 'exit'

; ===== 完了メッセージ =====
pause 1
messagebox 'ログ取得が完了しました' '完了'

TTLファイルの設定を変更する

そのまま使用する場合は、自分の環境に合わせて以下の部分を変更してください。

ユーザー名とパスワード

USERNAME = 'XXX'
PASSWORD = 'XXX'

Cisco機器へSSH接続するためのユーザー名とパスワードを設定します。

例えば、

USERNAME = 'admin'
PASSWORD = 'password'

のように設定します。

ただし、パスワードをTTLファイルへ直接記述する方法にはセキュリティ上の注意が必要です。

TTLファイルを他の人が閲覧できる環境では、パスワードが漏洩する可能性があります。

業務環境で使用する場合は、ファイルのアクセス権限なども確認してください。


接続先IPアドレスを変更する

次にCisco機器のIPアドレスを設定します。

HOST[0] = '192.168.10.20'

ここを取得対象のCisco機器のIPアドレスへ変更します。

例えば、

HOST[0] = '192.168.1.1'

とします。


ログファイル名を設定する

次の部分では、ログファイルの名前を設定しています。

NAME[0] = 'RT1_show_run'

実際に作成されるログファイルは、例えば以下のようになります。

RT1_show_run_log_20261003.txt

日付部分は実行した日に自動的に変わります。

そのため、同じバッチファイルを毎日実行しても、取得日を確認しやすくなります。


日付を自動取得する

以下の処理で現在の日付を取得しています。

getdate datestr '%Y%m%d'

例えば2026年10月3日に実行した場合、

20261003

という文字列になります。

この値をログファイル名に利用しています。


ログファイルの保存場所

以下の処理で、TTLファイルが保存されているディレクトリを取得しています。

getdir logfilepath

その後、

sprintf2 logfile "%s\%s_log_%s.txt" logfilepath NAME[0] datestr

でログファイルのパスを作成しています。

そのため、例えばTTLファイルが、

C:\Users\user\macro\show_run.ttl

に保存されている場合、ログファイルも基本的に同じディレクトリへ保存されます。


terminal length 0を実行する理由

Cisco IOSでは、show runの結果が長い場合、画面に一度に表示できないため、

--More--

のようなページングが発生します。

そこで、show runを実行する前に、

terminal length 0

を実行します。

これによってページングを無効にし、show runの結果を最後まで一気に出力できます。

今回のマクロでは、

sendln 'ter len 0'
wait '#'

として実行しています。

ter len 0はCisco IOSで使用できる省略形です。


show runを実行する

実際の設定情報を取得する部分です。

sendln 'show run'
wait '#'

sendlnでCisco機器へコマンドを送信し、waitでプロンプトが返ってくるまで待機します。

ログを開始した状態でshow runを実行するため、コマンドの実行結果がログファイルへ保存されます。


バッチファイルを作成する

次に、TTLファイルを簡単に起動するためのバッチファイルを作成します。

テキストエディタに以下を貼り付けます。

ファイル名は、

show_run.bat

などにします。

@echo off

set TTPMACRO=C:\Program Files (x86)\teraterm5\ttpmacro.exe
set MACRO=C:\Users\マクロ\show_run.ttl

"%TTPMACRO%" "%MACRO%"

バッチファイルの設定を変更する

環境によってTera Termのインストール場所やTTLファイルの保存場所が異なるため、以下の2箇所を自分の環境に合わせて変更してください。

set TTPMACRO=C:\Program Files (x86)\teraterm5\ttpmacro.exe

これはTera Termマクロ実行ファイルの場所です。

もう一つが、

set MACRO=C:\Users\マクロ\show_run.ttl

です。

こちらは先ほど作成したTTLファイルの場所を指定します。

例えば、

C:\Users\user\Documents\TeraTerm\show_run.ttl

に保存している場合は、

set MACRO=C:\Users\user\Documents\TeraTerm\show_run.ttl

とします。


実行する

準備ができたら、

show_run.bat

をダブルクリックします。

するとTera Termマクロが起動し、設定したCisco 1812JへSSH接続します。

接続後、自動的に、

terminal length 0
show run

が実行されます。

その後、ログファイルが保存され、処理が完了すると、

ログ取得が完了しました

というメッセージが表示されます。


作成されたログを確認する

例えば2026年10月3日に実行した場合、以下のようなログファイルが作成されます。

RT1_show_run_log_20261003.txt

ファイル名に日付が入るため、

RT1_show_run_log_20261001.txt
RT1_show_run_log_20261002.txt
RT1_show_run_log_20261003.txt

のように、日ごとの設定を保存できます。

Cisco機器の設定変更前後でshow runを取得しておけば、設定変更内容を確認するときにも役立ちます。


うまく動かない場合の確認ポイント

Tera Termが起動しない

バッチファイルの、

set TTPMACRO=

で指定しているttpmacro.exeのパスが正しいか確認してください。

Tera Termのインストール場所によってパスが異なる場合があります。


Cisco機器へ接続できない

以下を確認してください。

  • Cisco機器のIPアドレスが正しいか
  • SSHが有効になっているか
  • TCP/22番ポートへ接続できるか
  • ユーザー名・パスワードが正しいか
  • ネットワーク経路に問題がないか

show runの途中で処理が終わってしまう

今回のマクロでは、

wait '#'

でCisco IOSのプロンプトを待っています。

そのため、実際のプロンプトが#以外の場合や、機器の状態によって想定したプロンプトが返ってこない場合は、処理が停止する可能性があります。

例えばユーザーモードでは、

Router>

となり、特権EXECモードでは、

Router#

となります。

今回のマクロは#を待つ構成なので、あらかじめ特権EXECモードでSSHログインできる環境を想定しています。


複数のCisco機器からshow runを取得する場合

今回のサンプルでは、

strdim HOST 1
strdim NAME 1

HOST[0] = '192.168.10.20'
NAME[0] = 'RT1_show_run'

として1台の機器を対象にしています。

複数台の機器から取得したい場合は、Tera Termマクロの配列を利用して、接続先を増やす方法もあります。

例えば、

strdim HOST 2
strdim NAME 2

HOST[0] = '192.168.10.20'
NAME[0] = 'RT1_show_run'

HOST[1] = '192.168.10.21'
NAME[1] = 'RT2_show_run'

のように接続先を登録できます。

さらにループ処理を組み合わせれば、複数のCisco機器から順番にshow runを取得することも可能です。


まとめ

今回は、Tera TermマクロとWindowsのバッチファイルを組み合わせて、Cisco 1812Jのshow runをワンクリックで取得する方法を紹介しました。

毎回手動で、

Tera Termを起動
↓
Ciscoへログイン
↓
terminal length 0
↓
show run
↓
ログ保存
↓
ログアウト

と操作する代わりに、バッチファイルをダブルクリックするだけで一連の処理を自動化できます。

さらにログファイル名へ取得日を自動的に付けることで、過去の設定を確認するときにも分かりやすくなります。

Cisco機器の設定確認やバックアップを定期的に行っている場合は、こうした小さな自動化でも日々の作業時間を減らせます。

Tera TermマクロはCisco機器の設定取得だけでなく、複数台の機器へ同じコマンドを実行する処理などにも応用できます。

今回のマクロをベースに、複数台のCiscoルータから一括でshow runを取得する仕組みへ発展させることも可能です。

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