0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Tera TermマクロでCisco IOSのshow running-configとshow versionを別ログに保存する

0
Posted at

Tera TermマクロでCisco IOSのshow running-configとshow versionを別ログに保存する

はじめに

Cisco IOS機器の構築や保守では、作業前後に次のような情報を取得することがあります。

  • show running-config
  • show version
  • show inventory
  • show 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を実行
↓
ログを閉じる

コマンドごとにlogopenlogcloseを実行することで、出力先を分けています。

ファイル名を分ける

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を実行することも検討ください。

  • logopen
  • logclose
  • コマンド実行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で分割する方法もあります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?