Tera TermマクロでCisco IOSのshow running-configとshow versionを別ログに保存する
はじめに
Cisco IOS機器の構築や保守では、作業前後に次のような情報を取得することがあります。
show running-configshow versionshow inventoryshow interfaces status
複数のコマンド結果を1本のログに保存すると、証跡としては便利です。
一方で、設定レビューではrunning-configだけを確認したい、機器情報の確認ではshow versionだけを使いたい、といった場面もあります。
そこで本記事では、Tera Termマクロを使って、次の2つを別ファイルへ保存します。
- running-config
- version情報
このサンプルはCisco IOS機器を対象とし、SSHログイン後に特権EXECモードのプロンプトが表示される環境を前提とします。
出力イメージ
logs
└─ 20260703
├─ SW-TEST-01_192.0.2.10_shrun_20260703120000.log
└─ SW-TEST-01_192.0.2.10_shver_20260703120000.log
ファイル構成
TeraTermMacro
├─ run_collect.bat
└─ collect_split_log.ttl
batファイル
run_collect.batを作成します。
@echo off
setlocal
set "TTPMACRO=C:\Program Files (x86)\teraterm\ttpmacro.exe"
set "MACRO=%~dp0collect_split_log.ttl"
set "HOST=SW-TEST-01"
set "IPADDRESS=192.0.2.10"
set "USER=admin"
set "PASSWD=change_me"
start "" "%TTPMACRO%" "%MACRO%" ^
"%HOST%" ^
"%IPADDRESS%" ^
"%USER%" ^
"%PASSWD%"
endlocal
%~dp0は、実行しているbatファイルが保存されているフォルダを表します。
Tera Termマクロ
collect_split_log.ttlを作成します。
; ==================================================
; 初期処理
; ==================================================
getdir BASEDIR
setdir BASEDIR
HOST = param2
IPAddress = param3
USER = param4
PASSWORD = param5
timeout = 15
PROMPT_PRIV = HOST
strconcat PROMPT_PRIV '#'
PROMPT_USER = HOST
strconcat PROMPT_USER '>'
; ==================================================
; 保存先フォルダ
; ==================================================
gettime DAYDIR '%Y%m%d'
SAVEDIR = BASEDIR
strconcat SAVEDIR '\'
strconcat SAVEDIR DAYDIR
foldersearch SAVEDIR
if result = 0 then
foldercreate SAVEDIR
endif
; ==================================================
; SSH接続
; ==================================================
CONNECTCMD = IPAddress
strconcat CONNECTCMD ':22 /ssh /2 /auth=password /user='
strconcat CONNECTCMD USER
strconcat CONNECTCMD ' /passwd='
strconcat CONNECTCMD PASSWORD
strconcat CONNECTCMD ' /nosecuritywarning'
connect CONNECTCMD
wait PROMPT_PRIV PROMPT_USER
if result = 0 then
messagebox 'SSH接続後のプロンプトを確認できませんでした。' 'Connection error'
end
endif
if result = 2 then
messagebox '特権EXECモードではありません。enable処理を追加するか、privilege 15のユーザーを使用してください。' 'Privilege error'
end
endif
sendln 'terminal length 0'
wait PROMPT_PRIV
; ==================================================
; show running-config
; ==================================================
LOGFILE_RUN = SAVEDIR
strconcat LOGFILE_RUN '\'
strconcat LOGFILE_RUN HOST
strconcat LOGFILE_RUN '_'
strconcat LOGFILE_RUN IPAddress
strconcat LOGFILE_RUN '_shrun_%Y%m%d%H%M%S.log'
gettime LOGFILE_RUN LOGFILE_RUN
logopen LOGFILE_RUN 0 0
sendln ''
sendln ''
wait PROMPT_PRIV
sendln 'show running-config'
wait PROMPT_PRIV
sendln ''
sendln ''
wait PROMPT_PRIV
logclose
; ==================================================
; show version
; ==================================================
LOGFILE_VER = SAVEDIR
strconcat LOGFILE_VER '\'
strconcat LOGFILE_VER HOST
strconcat LOGFILE_VER '_'
strconcat LOGFILE_VER IPAddress
strconcat LOGFILE_VER '_shver_%Y%m%d%H%M%S.log'
gettime LOGFILE_VER LOGFILE_VER
logopen LOGFILE_VER 0 0
sendln ''
sendln ''
wait PROMPT_PRIV
sendln 'show version'
wait PROMPT_PRIV
sendln ''
sendln ''
wait PROMPT_PRIV
logclose
; ==================================================
; 終了処理
; ==================================================
sendln 'exit'
pause 1
closett
end
処理の流れ
このマクロでは、次の順番で処理します。
SSH接続
↓
terminal length 0
↓
show running-configのログを開始
↓
show running-configを実行
↓
ログを閉じる
↓
show versionのログを開始
↓
show versionを実行
↓
ログを閉じる
コマンドごとにlogopenとlogcloseを実行することで、出力先を分けています。
ファイル名を分ける
running-config側では、ファイル名にshrunを含めます。
strconcat LOGFILE_RUN '_shrun_%Y%m%d%H%M%S.log'
version側では、ファイル名にshverを含めます。
strconcat LOGFILE_VER '_shver_%Y%m%d%H%M%S.log'
これにより、ファイル名だけで内容を判別できます。
terminal length 0を先に実行する
Cisco IOSでは、出力行数が多いとページ送りが発生します。
--More--
マクロ実行中にページ送りが発生すると、プロンプト待ちの処理が完了しません。
そのため、ログ取得前に次のコマンドを実行します。
sendln 'terminal length 0'
wait PROMPT_PRIV
pauseではなくプロンプトを待つ
固定時間のpauseだけを使うと、出力量が多い機器で処理が終わる前に次のコマンドへ進む可能性があります。
このサンプルでは、コマンド実行後に特権EXECモードのプロンプトを待ちます。
sendln 'show running-config'
wait PROMPT_PRIV
ホスト名がSW-TEST-01の場合、次の文字列を待ちます。
SW-TEST-01#
実際のプロンプト表示がホスト名と異なる環境では、待機文字列を調整してください。
プロンプトSW-TEST-01#の待ちを複数配置する
ログの作成やログの保管に対して、waitが待ちきれないことや先にコマンドを打ってしまうことがあります。
そのため、コマンドの前後に空Enterを打ってプロンプトを待つことで、ログの切り替わりをきちんと分けることができます。
sendln ''
sendln ''
wait PROMPT_PRIV
必要があれば、以下タイミングでpauseを実行することも検討ください。
logopenlogclose- コマンド実行
sendln前後
追加コマンドを別ファイルへ保存する
同じ考え方で、他のコマンドも個別ログにできます。
例えばshow inventoryを保存する場合は、次の処理を追加します。
LOGFILE_INV = SAVEDIR
strconcat LOGFILE_INV '\'
strconcat LOGFILE_INV HOST
strconcat LOGFILE_INV '_'
strconcat LOGFILE_INV IPAddress
strconcat LOGFILE_INV '_inventory_%Y%m%d%H%M%S.log'
gettime LOGFILE_INV LOGFILE_INV
logopen LOGFILE_INV 0 0
sendln ''
sendln ''
wait PROMPT_PRIV
sendln 'show inventory'
wait PROMPT_PRIV
sendln ''
sendln ''
wait PROMPT_PRIV
logclose
注意点
パスワードを平文で保存しない
この例では説明を簡単にするため、batファイルへパスワードを記載しています。
set "PASSWD=change_me"
本番環境では、次の方法を検討してください。
- 実行時にパスワードを入力する
- Tera Termのパスワード入力ダイアログを利用する
- SSH鍵認証を利用する
- batやTTLのアクセス権を制限する
running-configには秘匿情報が含まれる
show running-configには、IPアドレス、ユーザー名、認証設定、SNMP Community、パスワードハッシュなどが含まれる場合があります。
外部共有時は必ずマスキングしてください。
ログの開始位置
この例では、logopenのあとにコマンドを送信しています。
そのため、ログにはコマンド行と出力結果が記録されます。
接続直後のメッセージも残したい場合は、SSH接続直後から別の全体ログを取得する方法を検討してください。
まとめ
Tera Termマクロでコマンドごとにログを開始・終了することで、running-configとversion情報を別ファイルへ保存できます。
目的別にログを分けることで、次のような作業がしやすくなります。
- 設定レビュー
- 機器情報の棚卸し
- 作業前後比較
- 納品用証跡の整理
- PowerShellによる後処理
次の段階として、全体ログから必要なコマンド部分だけをPowerShellで分割する方法もあります。