A10 Thunder にログインしコマンドログを取得する Tera Term マクロの共有

目次

動作確認環境

  • Tera Term Version 4.104

マクロ概要

ネットワーク作業では、事前・事後ログ、正常性確認ログとして、複数の状態確認コマンドのログを取得する必要がある。このマクロを使用することで、A10 ネットワークス社のロードバランサ製品である Thunder シリーズにログインした上で設定されたコマンドを実行しログを保存することができる。

動作内容

  • A10 Thunder にログインした上でログ保存を開始し、設定されたコマンドを実行してログアウトまで行う
  • リモート接続プロトコルとしては Telnet と SSH に対応
  • Telnet の認証方式としてはユーザ認証に対応
  • SSH の認証方式としてはユーザパスワード認証のみに対応
  • 対象機器にログイン後、特権モードに移行した上でログ保存を開始しコマンド実行する
  • 実行コマンドはデフォルトでは 30 個まで指定可能。必要に応じて増やすことも可能

マクロテキスト

;;*********************************************************
;; Title: A10 Thunder にログインしコマンドログを取得するマクロ
;; 作成元: https://teramacro.com/
;; 説明ページ: https://teramacro.com/macro-a10getcmdlog/
;;*********************************************************
;;================================================
;; (1)変数定義パート(マクロユーザ編集箇所)
;; ※使わない変数でも記述を削除しないこと
;;================================================
; 接続先機器情報
hostname_target = 'XXXXX' ;対象機器のホスト名
address_target = 'x.x.x.x' ;対象機器のIPアドレス
username_target = 'admin' ;対象機器のログインユーザ名
userpass_target = 'a10' ;対象機器のログインユーザパスワード
enablepass_target = 'admin' ;対象機器のenableパスワード
connectprotocol_target = 'ssh' ;Telnetなら「telnet」SSHなら「ssh」とする

; 実行コマンド設定
cmdNumber = 30 ;コマンド数上限。30以上にしたい場合は値を増やし、下のcmdList[番号]行も合わせて増やす
strdim cmdList cmdNumber ;コマンドを格納する配列。以下各cmdList[番号]行に実行コマンドを記述する。要素番号は(cmdNumber-1)が上限
cmdList[0] = 'terminal length 0' ;ここはページャ無効化コマンド(terminal length 0)のままにすること
cmdList[1] = 'show bootimage'
cmdList[2] = 'show version'
cmdList[3] = 'show running-config'
cmdList[4] = 'show startup-config'
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_target ;ログファイル名(デフォルトはホスト名)
datetime_flag = 1 ; 1⇒日付時刻をファイル名末尾に付与する、0⇒付与しない

;;================================================
;; (2)メイン処理パート
;; ※ここから下は編集しないこと
;;================================================

; 対象機器へのログイン処理
address = address_target
username = username_target
userpass = userpass_target
connect_protocol = connectprotocol_target
call LoginTelnetOrSSH

;;-----------------------------------------
; 対象機器にて特権モードに移行
;;-----------------------------------------
enablepass = enablepass_target
sprintf2 prompt_user '^%s.*>' hostname_target
sprintf2 prompt_privilege '^%s.*#' hostname_target
call BecomePrivilege

;;-----------------------------------------
; ログ保存開始
;;-----------------------------------------
call StartLogging

;;-----------------------------------------
; コマンド実行
;;-----------------------------------------
call ExecuteCommand

;;-----------------------------------------
; ログアウト
;;-----------------------------------------
sendln
sendln 'exit'
waitregex prompt_user
flushrecv
sendln 'exit'
wait "Are you sure to quit (N/Y)?:" "Are you sure you want to quit (N/Y)?:"
flushrecv
sendln "y"

;;-----------------------------------------
; メイン処理終了
;;-----------------------------------------
end

;;================================================
;; (3)サブルーチンパート
;;================================================

;;-----------------------------------------
;;◆LoginTelnetOrSSH: 対象機器に Telnet または SSH でログインする
;; 変数:
;;  - connect_protocol : 接続プロトコル
;;   - telnet ⇒ サブルーチン TelnetLogin を呼び出す
;;   - ssh ⇒ サブルーチン SSHLogin を呼び出す
;;   - その他 ⇒ エラーとしてマクロを停止する
;;-----------------------------------------
:LoginTelnetOrSSH
 error_flag = 1 

 strcompare connect_protocol 'ssh'
 if result = 0 then
  call SSHLogin
  error_flag = 0
 endif

 strcompare connect_protocol 'telnet'
 if result = 0 then
  call TelnetLogin
  error_flag = 0
 endif

 if error_flag = 1 then
  messagebox 'プロトコル設定(connect_protocol)が不正のため処理を中止します' 'エラー'
  end
 endif
return

;;-----------------------------------------
;;◆TelnetLogin: 対象機器に Telnet ログインする
;; 変数:
;;  - address : IPアドレス
;;  - username : ログインユーザ名
;;  - userpass : ログインユーザパスワード
;;-----------------------------------------
:TelnetLogin
 sprintf2 connectCommand '%s:23 /nossh /T=1' address
 connect connectCommand
 wait 'Username:' 'login:'
 sendln username
 wait 'Password:'
 sendln userpass
return

;;-----------------------------------------
;;◆SSHLogin: SSHログインを行う
;; 変数:
;;  - address : IPアドレス
;;  - username : ログインユーザ名
;;  - userpass : ログインユーザパスワード
;;-----------------------------------------
:SSHLogin
 sprintf2 connectCommand '%s:22 /ssh /2 /auth=password /user=%s /passwd=%s /nosecuritywarning' address username userpass
 connect connectCommand
return

;;-----------------------------------------
;;◆BecomePrivilege: 対象機器で特権モードに移行する
;; 変数:
;;  - prompt_user : ユーザモードのプロンプトを示す正規表現
;;  - prompt_privilege : 特権モードのプロンプトを示す正規表現
;;  - enablepass : Enableパスワード
;;-----------------------------------------
:BecomePrivilege
 flushrecv
 sendln
 waitregex prompt_user prompt_privilege
 if result = 1 then
  flushrecv
  sendln 'enable'
  wait 'Password:'
  flushrecv
  sendln enablepass
 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 : 特権モードのプロンプトを示す正規表現
;;-----------------------------------------
: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)変数定義パート(マクロユーザ編集箇所)」内の変数の値を接続対象機器に合わせて変更して保存する
  • マクロユーザが編集するべき設定項目は以下の通り
セクション項目(変数名)説明備考
接続先機器情報hostname_target接続先機器のホスト名設定必須
address_target接続先機器のIPアドレス設定必須
username_target接続先機器のログインユーザ名telnet でユーザ認証の場合、ssh の場合は設定
userpass_target接続先機器のログインユーザパスワードtelnet でユーザ認証の場合、ssh の場合は設定
vtypass_target接続先機器のログイン用VTYパスワードtelnet でパスワード認証の場合は設定
enablepass_target接続先機器のenableパスワード設定必須
connectprotocol_target接続先機器への接続プロトコル「telnet」か「ssh」を指定
実行コマンド設定cmdNumber実行コマンド数配列の定義にて要素数として使用される
cmdList実行コマンドを格納する配列要素数として cmdNumber を使用する
cmdList[0]~
cmdList[cmdNumber-1]
各実行コマンドを格納する配列要素cmdNumber をデフォルトから増やした場合は要素の定義を手動で追加する
値が空文字列('')の場合、無視される
ページャ無効化コマンド(ter len 0)必須のため cmdList[0] は変えないこと
ログ保存設定logfolderログ保存先フォルダ名マクロファイル格納フォルダ内に指定した名前のフォルダが作成される
logfilenameログファイル名logfolder で指定したフォルダ内に保存される
datetime_flagログファイル名の末尾に日付時刻情報を付与するかどうか1 ⇒ 付与する
0 ⇒ 付与しない
  • 設定ができたらマクロファイルを保存する。マクロファイルをダブルクリックしてマクロを実行する
    • 作業端末にて拡張子「.ttl」へのアプリの紐づけを実施していない場合はこちらの記事参照

設定例

接続機器情報

  • SSH 接続する場合
    • 対象機器ホスト名: vThunder271
    • 対象機器アドレス: 192.168.75.55
    • ログインユーザ名/パス: admin/a10
    • enableパスワード: admin
; 接続先機器情報
hostname_target = 'vThunder271' ;対象機器のホスト名
address_target = '192.168.75.55' ;対象機器のIPアドレス
username_target = 'admin' ;対象機器のログインユーザ名
userpass_target = 'a10' ;対象機器のログインユーザパスワード
enablepass_target = 'admin' ;対象機器のenableパスワード
connectprotocol_target = 'ssh' ;Telnetなら「telnet」SSHなら「ssh」とする
  • Telnet 接続する場合
    • 対象機器ホスト名: vThunder271
    • 対象機器アドレス: 192.168.75.55
    • ログインユーザ名/パス: admin/a10
    • enableパスワード: admin
; 接続先機器情報
hostname_target = 'vThunder271' ;対象機器のホスト名
address_target = '192.168.75.55' ;対象機器のIPアドレス
username_target = 'admin' ;対象機器のログインユーザ名
userpass_target = 'a10' ;対象機器のログインユーザパスワード
enablepass_target = 'admin' ;対象機器のenableパスワード
connectprotocol_target = 'telnet' ;Telnetなら「telnet」SSHなら「ssh」とする

実行コマンド設定

  • 実行コマンドを (terminal length 0 を以外で) 5 個指定する場合
; 実行コマンド設定
cmdNumber = 30 ;コマンド数上限。30以上にしたい場合は値を増やし、下のcmdList[番号]行も合わせて増やす
strdim cmdList cmdNumber ;コマンドを格納する配列。以下各cmdList[番号]行に実行コマンドを記述する。要素番号は(cmdNumber-1)が上限
cmdList[0] = 'terminal length 0' ;ここはページャ無効化コマンド(terminal length 0)のままにすること
cmdList[1] = 'show bootimage'
cmdList[2] = 'show version'
cmdList[3] = 'show running-config'
cmdList[4] = 'show startup-config'
cmdList[5] = 'show log'
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] = ''
  • 実行コマンド数を 40 個まで増やす場合
; 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] = 'コマンドを記載' ;cmdNumber = 40 のため cmdList[39] まで記載できる

ログ保存設定

  • デフォルトの場合
    • 「作業ログ」フォルダに保存
    • ファイル名は「<対象機器ホスト名>_yyyymmdd-hhmmss.log
; ログ保存設定
logfolder = '作業ログ' ;ログファイル保存先フォルダ名
logfilename = hostname_target ;ログファイル名
datetime_flag = 1 ; 1⇒日付時刻をファイル名末尾に付与する、0⇒付与しない
  • ファイル名に日付時刻を付与しない場合 datetime_flag の値を「0」に変える
datetime_flag = 0 ; 1⇒日付時刻をファイル名末尾に付与する、0⇒付与しない

関連

不具合報告先


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


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

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

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

コメント

コメントする

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

目次