目次
動作確認環境
- Tera Term Version 4.104
マクロ概要
ネットワーク作業では、事前・事後ログ、正常性確認ログとして、複数の状態確認コマンドのログを取得する必要がある。このマクロを使用することで、Cisco 機器(一般的なスイッチ・ルータ・ファイアウォール)にログインした上で設定されたコマンドを実行しログを保存することができる。
なお、本マクロはコンソールログインにのみ対応している。リモートアクセス(Telnet, SSH)によるコマンドログ取得については以下の記事で共有しているマクロを使用されたし。
動作内容
- Cisco 機器にコンソールポートからログインした上でログ保存を開始し、設定されたコマンドを実行してログアウトまで行う
- ログイン時の認証については、ユーザ認証、lineパスワード認証、認証無しに対応
- 対象機器にログイン後、特権EXECモードに移行した上でログ保存を開始しコマンド実行する
- 実行コマンドはデフォルトでは 30 個まで指定可能。必要に応じて増やすことも可能
マクロテキスト
;;*********************************************************
;; Title: Cisco 機器にコンソールポートからログインしコマンドログを取得するマクロ
;; 作成元: https://teramacro.com/
;; 説明ページ: https://teramacro.com/macro-ciscoconsolegetcmdlog/
;;*********************************************************
;;================================================
;; (1)変数定義パート(マクロユーザ編集箇所)
;; ※使わない変数でも記述を削除しないこと
;;================================================
; 接続先機器情報
comnumber = 'X' ;COMポート番号(整数値)
hostname = 'xxxx' ;プロンプトに表示されるホスト名
username = 'xxxx' ;ログインユーザ名
userpass = 'xxxx' ;ログインユーザパスワード
linepass = 'xxxx' ;console用lineパスワード
enablepass = 'xxxx' ;enableパスワード
sprintf2 prompt_user '^%s.*>' hostname ;ユーザEXECモードのプロンプト待ち用正規表現、変更不要
sprintf2 prompt_privilege '^%s.*#' hostname ;特権EXECモードのプロンプト待ち用正規表現、変更不要
; 実行コマンド設定
cmdNumber = 30 ;コマンド数上限。30以上にしたい場合は値を増やし、下のcmdList[番号]行も合わせて増やす
strdim cmdList cmdNumber ;コマンドを格納する配列。以下各cmdList[番号]行に実行コマンドを記述する。要素番号は(cmdNumber-1)が上限
cmdList[0] = 'terminal length 0' ;ここはページャ無効化コマンドにすること ASA の場合は「ter pa 0」にする
cmdList[1] = ''
cmdList[2] = ''
cmdList[3] = ''
cmdList[4] = ''
cmdList[5] = ''
cmdList[6] = ''
cmdList[7] = ''
cmdList[8] = ''
cmdList[9] = ''
cmdList[10] = ''
cmdList[11] = ''
cmdList[12] = ''
cmdList[13] = ''
cmdList[14] = ''
cmdList[15] = ''
cmdList[16] = ''
cmdList[17] = ''
cmdList[18] = ''
cmdList[19] = ''
cmdList[20] = ''
cmdList[21] = ''
cmdList[22] = ''
cmdList[23] = ''
cmdList[24] = ''
cmdList[25] = ''
cmdList[26] = ''
cmdList[27] = ''
cmdList[28] = ''
cmdList[29] = ''
; ログ保存設定
logfolder = '作業ログ' ;ログファイル保存先フォルダ名
logfilename = hostname ;ログファイル名
datetime_flag = 1 ; 1⇒日付時刻をファイル名末尾に付与する、0⇒付与しない
;;================================================
;; (2)メイン処理パート
;; ※ここから下は編集しないこと
;;================================================
;;-----------------------------------------
; ログイン
;;-----------------------------------------
sprintf2 connectcmd '/C=%s' comnumber
connect connectcmd
flushrecv
sendln
waitregex 'Username:' 'Password:' prompt_user prompt_privilege
if result = 1 then ;ユーザ認証の場合
sendln username
wait 'Password:'
sendln userpass
waitregex prompt_user prompt_privilege
call BecomePrivilege
elseif result = 2 then ;lineパスワード認証の場合
sendln linepass
waitregex prompt_user prompt_privilege
call BecomePrivilege
elseif result = 3 then ;認証無しの場合
call BecomePrivilege
endif
;;-----------------------------------------
; ログ保存開始
;;-----------------------------------------
call StartLogging
;;-----------------------------------------
; コマンド実行
;;-----------------------------------------
call ExecuteCommand
;;-----------------------------------------
; ログアウト
;;-----------------------------------------
sendln
waitregex prompt_privilege
sendln 'exit'
;;-----------------------------------------
; Tera Term を閉じる
;;-----------------------------------------
pause 3
closett
;;-----------------------------------------
; メイン処理終了
;;-----------------------------------------
end
;;================================================
;; (3)サブルーチンパート
;;================================================
;;-----------------------------------------
;;◆BecomePrivilege: Cisco 機器で特権EXECモードに移行する
;; 変数:
;; - prompt_user : ユーザEXECモードのプロンプトを示す正規表現
;; - prompt_privilege : 特権EXECモードのプロンプトを示す正規表現
;; - enablepass : Enableパスワード
;;-----------------------------------------
:BecomePrivilege
flushrecv
sendln
waitregex prompt_user prompt_privilege
if result = 1 then
flushrecv
sendln 'enable'
waitregex 'Password:' prompt_privilege
if result = 1 then
flushrecv
sendln enablepass
endif
endif
return
;;-----------------------------------------
;;◆StartLogging: ログ保存を開始する
;; 変数:
;; - logfolder : ログ保存先フォルダ名 ※1階層のみ対応
;; - logfilename : ログファイル名
;; - datetime_flag : 「_%Y%m%d-%H%M%S」形式の日付時刻をログファイル名に付与するかどうか
;; 1 ⇒ 日付時刻を付与する
;; 1以外 ⇒ 日付時刻を付与しない
;;-----------------------------------------
:StartLogging
loginfo logfilename_temp
if result <> -1 logclose
getdir logfilepath
ifdefined logfolder
if result > 0 then
strcompare logfolder ''
if result <> 0 then
foldersearch logfolder
if result = 0 foldercreate logfolder
sprintf2 logfilepath '%s\%s' logfilepath logfolder
endif
endif
sprintf2 logfilepath '%s\%s' logfilepath logfilename
ifdefined datetime_flag
if result > 0 then
if datetime_flag = 1 then
gettime timestr '_%Y%m%d-%H%M%S'
strconcat logfilepath timestr
endif
endif
strconcat logfilepath '.log'
logopen logfilepath 0 0
return
;;-----------------------------------------
;;◆ExecuteCommand: Cisco 機器でコマンドを実行する
;; 変数:
;; - cmdNumber : 実行コマンドの数
;; - cmdList : 実行コマンドを格納した配列
;; - prompt_privilege : 特権EXECモードのプロンプトを示す正規表現
;;-----------------------------------------
:ExecuteCommand
for i 0 (cmdNumber - 1)
command = cmdList[i]
strcompare cmdList[i] ''
if result = 0 continue
flushrecv
sendln
waitregex prompt_privilege
flushrecv
sendln command
waitregex prompt_privilege
next
return
使い方
- 上記のマクロテキストをコピーしてテキストファイルに貼り付け、拡張子を「.ttl」として保存する
- マクロテキスト内の上部にある「(1)変数定義パート(マクロユーザ編集箇所)」内の変数の値を接続対象機器に合わせて変更して保存する
- マクロユーザが編集するべき設定項目は以下の通り
| セクション | 項目(変数名) | 説明 | 備考 |
|---|---|---|---|
| 接続先機器情報 | comnumber | コンソール接続時のCOMポート番号 | 設定必須 Tera Termの「新しい接続」画面のシリアル欄で番号を確認できる |
| hostname | 接続先機器のホスト名 | 設定は任意 設定しない場合空文字列「''」にすること 設定する場合プロンプトに表示されるホスト名にする | |
| username | 接続先機器のログインユーザ名 | ユーザ認証の場合は設定必須 | |
| userpass | 接続先機器のログインユーザパスワード | ユーザ認証の場合は設定必須 | |
| linepass | 接続先機器のログイン用lineパスワード | lineパスワード認証の場合は設定必須 | |
| enablepass | 接続先機器のenableパスワード | enableパスワードが設定されている場合は設定必須 | |
| 実行コマンド設定 | cmdNumber | 実行コマンド数 | 配列の定義にて要素数として使用される |
| cmdList | 実行コマンドを格納する配列 | 要素数として cmdNumber を使用する | |
| cmdList[0]~ cmdList[cmdNumber-1] | 各実行コマンドを格納する配列要素 | cmdNumber をデフォルトから増やした場合は要素の定義を手動で追加する 値が空文字列の場合、無視される ページャ無効化コマンド(ter len 0)必須のため cmdList[0] は変えないこと | |
| ログ保存設定 | logfolder | ログ保存先フォルダ名 | マクロファイル格納フォルダ内に指定した名前のフォルダが作成される |
| logfilename | ログファイル名 | logfolder で指定したフォルダ内に保存される | |
| datetime_flag | ログファイル名の末尾に日付時刻情報を付与するかどうか | 1 ⇒ 付与する 0 ⇒ 付与しない |
- 設定ができたらマクロファイルを保存する。マクロファイルをダブルクリックしてマクロを実行する
- 拡張子「.ttl」へのアプリの紐づけを実施していない場合はこちらの記事参照
設定例
接続機器情報、踏み台機器情報
- ユーザ認証の場合
; 接続先機器情報
comnumber = '5' ;COMポート番号(整数値)
hostname = 'MyRouter' ;プロンプトに表示されるホスト名
username = 'admin' ;ログインユーザ名
userpass = 'admin' ;ログインユーザパスワード
linepass = '' ;console用lineパスワード
enablepass = 'admin' ;enableパスワード
sprintf2 prompt_user '^%s.*>' hostname ;ユーザEXECモードのプロンプト待ち用正規表現、変更不要
sprintf2 prompt_privilege '^%s.*#' hostname ;特権EXECモードのプロンプト待ち用正規表現、変更不要- lineパスワード認証の場合
; 接続先機器情報
comnumber = '5' ;COMポート番号(整数値)
hostname = 'MyRouter' ;プロンプトに表示されるホスト名
username = '' ;ログインユーザ名
userpass = '' ;ログインユーザパスワード
linepass = 'admin' ;console用lineパスワード
enablepass = 'admin' ;enableパスワード
sprintf2 prompt_user '^%s.*>' hostname ;ユーザEXECモードのプロンプト待ち用正規表現、変更不要
sprintf2 prompt_privilege '^%s.*#' hostname ;特権EXECモードのプロンプト待ち用正規表現、変更不要実行コマンド設定
- 実行コマンドを 10 個まで指定する場合
; 実行コマンド設定
cmdNumber = 30 ;コマンド数上限。30以上にしたい場合は値を増やし、下のcmdList[番号]行も合わせて増やす
strdim cmdList cmdNumber ;コマンドを格納する配列。以下各cmdList[番号]行に実行コマンドを記述する。要素番号は(cmdNumber-1)が上限
cmdList[0] = 'terminal length 0'
cmdList[1] = 'show clock'
cmdList[2] = 'show version'
cmdList[3] = 'show flash:'
cmdList[4] = 'show inventory'
cmdList[5] = 'show running-config'
cmdList[6] = 'show startup-config'
cmdList[7] = 'show ip interface brief'
cmdList[8] = 'show interfaces'
cmdList[9] = 'show log'
cmdList[10] = ''
cmdList[11] = ''
cmdList[12] = ''
cmdList[13] = ''
cmdList[14] = ''
cmdList[15] = ''
cmdList[16] = ''
cmdList[17] = ''
cmdList[18] = ''
cmdList[19] = ''
cmdList[20] = ''
cmdList[21] = ''
cmdList[22] = ''
cmdList[23] = ''
cmdList[24] = ''
cmdList[25] = ''
cmdList[26] = ''
cmdList[27] = ''
cmdList[28] = ''
cmdList[29] = ''
- 実行コマンド数を増やす場合
; cmdNumber の値を増やす
cmdNumber = 40
; cmdNumber の値を増やした分、cmdListの要素の記述を増やす
cmdList[30] = 'コマンドを記載'
cmdList[31] = 'コマンドを記載'
cmdList[32] = 'コマンドを記載'
cmdList[33] = 'コマンドを記載'
cmdList[34] = 'コマンドを記載'
cmdList[35] = 'コマンドを記載'
cmdList[36] = 'コマンドを記載'
cmdList[37] = 'コマンドを記載'
cmdList[38] = 'コマンドを記載'
cmdList[39] = 'コマンドを記載'
ログ保存設定
- デフォルトの場合
- 「作業ログ」フォルダに保存
- ファイル名は「<対象機器ホスト名>_yyyymmdd-hhmmss.log」
; ログ保存設定
logfolder = '作業ログ' ;ログファイル保存先フォルダ名
logfilename = hostname_target ;ログファイル名
datetime_flag = 1 ; 1⇒日付時刻をファイル名末尾に付与する、0⇒付与しない- ファイル名に日付時刻を付与しない場合
datetime_flag = 0 ; 1⇒日付時刻をファイル名末尾に付与する、0⇒付与しない関連
- 踏み台経由で Cisco 機器にログインする Tera Term マクロの共有
- Cisco 機器にリモートログインしコマンドログを取得する Tera Term マクロの共有
- A10 Thunder にログインしコマンドログを取得する Tera Term マクロの共有
不具合報告先
- https://teramacro.com/contact/
- 本記事のコメント ※ページ下部
- 基礎知識
- コマンド解説
- ログイン
- コマンド実行
- ログ保存
- ファイル・フォルダ操作
- ユーザインターフェース
- 文字列操作
- 変数関連
- マクロのモジュール化
- テクニック
- サブルーチン
- オリジナルマクロ
【整備済み品】HP ノートパソコン 830G5/13.3型フルHD/Win 11/MS Office H&B 2019/第7世代i5-7200U 2.50GHz/メモリ 16GB/SSD 512GB/指紋リーダー/USB 3.0/WEBカメラ/初期設定済







コメント