This site covers Tera Term Macro as part of *** Shadowgarden.org ***

Cisco 機器にコンソールログインしコマンドログを取得する Tera Term マクロの共有

目次

動作確認環境

  • 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⇒付与しない

関連

不具合報告先


Tera Term マクロ関連記事リスト


Amazon で買えるおすすめアイテム(アフィリエイト)

ブログ始めるなら 【アフィリエイトリンク】

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次