目次
動作確認環境
- 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⇒付与しない
関連
不具合報告先
- 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カメラ/初期設定済
コメント