ネットワーク機器はコマンドでログを取得するのが一般的と思います。
しかし、CiscoやJuniperなど、複数のメーカが混じっていたり、
作業の都度、複数機器に手動でログインしてコマンドを実行するのは、
大変手間が掛かります。
よって、ネットワーク環境に応じたTeratermマクロを、
作成・運用しているところも多いと思います。
どなたかが似たようなものを公開しているかと思いましたが、
以下機能のものは見つけられませんでしたので公開します。
■機能
・複数機器を一度にログ取得可能
・機器ごとに実行コマンドを定義可能
・機器ごとにアカウント、パスワードを定義可能
・機器ごとにプロンプトを定義可能
・機器ごとにSSH / Telnetを定義可能
・機器ごとにenableパスワードの有無を吸収可能
・ログファイルの格納先をマクロ実行時に指定できる
・ログファイル名にホスト名と日付が付与される
・ログイン先リストファイルは部分的にコメントアウトが可能
・ログインできない機器があってもマクロが停止しない
■説明
・マクロは以下の①~③の3点を全て同じフォルダに格納してください。
①Teratermマクロ
②ログイン先リストファイル
③コマンドリストファイル
・事前にTeratermのTCP/IP設定で、
「自動的にウインドウを閉じる」をOFFにしてください。
・ ログイン先リストファイルは、以下の特徴があります。
- 環境に応じて変更してください。
- 先頭に # がある機器は処理がスキップ(コメントアウト)
- enableパスワードが空白の機器は特権モードへの移行処理がスキップ
- コマンドリスト列のファイルに列挙されたコマンドを取得する
・ コマンドリストファイル
- Ciscoは「ter len 0」、Junosは「 | no-more」などを含めてください。
・ローカル環境で動作は確認していますが、自己責任でご利用ください。
■マクロ
①Teratermマクロ
(この下の行からを拡張子 .ttl として保存してください。)
;##########################################
;設定
;##########################################
;ログ保存先の親フォルダ
logDir = 'C:\work\'
;ログイン先リストファイル名
listFile = 'list.csv'
;エラーログファイル名
errorFile = 'error.txt'
;リストファイル内のコメントアウト文字
commentMark = '#'
;SSH/Telnet接続時のタイムアウト(秒)
accessTimeout = '5'
;ログ取得時のタイムアウト(秒)
logTimeout = 120
;##########################################
;実行処理
;##########################################
;エラー数の初期化
errorCounter = 0
call MAKEDIRECTORY
call OPENLISTFILE
call MAIN
call CLOSELISTFILE
call ENDPROCESS
end
;##########################################
;サブルーチン
;##########################################
;---------------------------------------------------------
;フォルダ作成
;---------------------------------------------------------
:MAKEDIRECTORY
inputbox 'ログ格納フォルダ名を入力してください:' ''
;空入力だったら終了
strcompare inputstr ''
if result = 0 then
end
endif
mkdirName = inputstr
;フォルダ作成コマンド生成
mkdir = 'cmd /c md '
strconcat mkdir logDir
strconcat mkdir mkdirName
exec mkdir
pause 1
return
;---------------------------------------------------------
;ループ処理
;---------------------------------------------------------
:MAIN
;ループ終了判定フラグ
mainLoopEnd = 1
while mainLoopEnd
comment = 0
timeoutChk = 0
filereadln hosts line
;ログイン先リストファイルがEOFでなければ、ループ終了判定フラグをクリア
if result then
mainLoopEnd = 0
endif
if mainLoopEnd <> 0 then
call GETPARAM
;コメントアウトでなければログイン処理へ
if comment = 0 then
call LOGIN
if timeoutChk = 0 then
log_1 = mkdirName
call MAKELOGFILE
call GETLOG
call LOGOUT
else
call WRITEERROR
call CONNECTTIMEOUT
endif
endif
endif
endwhile
return
;---------------------------------------------------------
;ログイン先リストファイルからパラメータ取得
;---------------------------------------------------------
:GETPARAM
;コメントアウトチェック
strcopy line 1 1 commentOut
strcompare commentOut commentMark
;一致したらループ処理へ戻る
if result = 0 then
comment = 1
return
endif
;ホスト名取得
strscan line ','
column = result-1
strcopy line 1 column hostname
strlen line
column = column+2
strcopy line column result line
;IPアドレス取得
strscan line ','
column = result-1
strcopy line 1 column ipAddress
strlen line
column = column+2
strcopy line column result line
;ログインユーザ取得
strscan line ','
column = result-1
strcopy line 1 column user
strlen line
column = column+2
strcopy line column result line
;ログインパスワード取得
strscan line ','
column = result-1
strcopy line 1 column passwd
strlen line
column = column+2
strcopy line column result line
;ログイン時のプロンプト取得
strscan line ','
column = result-1
strcopy line 1 column promptLogin
strlen line
column = column+2
strcopy line column result line
;enableパスワード取得
strscan line ','
column = result-1
strcopy line 1 column enaPasswd
strlen line
column = column+2
strcopy line column result line
;ログ取得時のプロンプト取得
strscan line ','
column = result-1
strcopy line 1 column promptInput
strlen line
column = column+2
strcopy line column result line
;アクセス方法取得
strscan line ','
column = result-1
strcopy line 1 column access
strlen line
column = column+2
strcopy line column result line
;コマンドリスト取得
cmdList = line
return
;---------------------------------------------------------
;ログイン実行
;---------------------------------------------------------
:LOGIN
;接続方法がSSHだったらSSHのTeratermコマンドを生成
strcompare access 'ssh'
if result = 0 then
sshCommand = ipAddress
strconcat sshCommand ':22 /ssh /2 /auth=password /user='
strconcat sshCommand user
strconcat sshCommand ' /passwd='
strconcat sshCommand passwd
strconcat sshCommand ' /timeout='
strconcat sshCommand accessTimeout
connect sshCommand
;そうでなければtelnet
else
telnetCommand = ipAddress
strconcat telnetCommand ':23 /nossh /timeout='
strconcat telnetCommand accessTimeout
connect telnetCommand
;ログイン時に待ち受ける文字列は必要に応じて追加する
wait 'Username:'
sendln user
wait 'Password:'
sendln passwd
endif
;ログインアカウント送信後、ログイン時のプロンプトが返ってこなければタイムアウト
wait promptLogin
if result = 0 then
timeoutMessage = '接続タイムアウト'
timeoutChk = 1
return
endif
;enableパスワードが空でなければ特権モードにログイン
strcompare enaPasswd ''
if result = 1 then
sendln 'en'
wait 'Password:'
sendln enaPasswd
wait promptInput
endif
return
;---------------------------------------------------------
;ログファイル作成
;---------------------------------------------------------
:MAKELOGFILE
;日付時刻取得
getdate date
strcopy date 1 4 datey
strcopy date 6 2 datem
strcopy date 9 2 dated
;時刻取得
gettime hhmmss "-%H%M%S"
logFile = logDir
strconcat logFile mkdirName
strconcat logFile '\'
strconcat logFile hostname
strconcat logFile '_'
strconcat logFile datey
strconcat logFile datem
strconcat logFile dated
strconcat logFile hhmmss
strconcat logFile '.txt'
return
;---------------------------------------------------------
;ログ書き込み
;---------------------------------------------------------
:GETLOG
logopen logFile 0 1
timeout = logTimeout
logLoopEnd = 1
fileopen command cmdList 0
while logLoopEnd
comment = 0
filereadln command line
if result then
logLoopEnd = 0
endif
;コメントアウトチェック
strcopy line 1 1 commentOut
strcompare commentOut commentMark
if result = 0 then
comment = 1
endif
if comment = 0 then
sendln line
wait promptInput
endif
endwhile
logclose
return
;---------------------------------------------------------
;ログアウト
;---------------------------------------------------------
:LOGOUT
sendln 'quit'
wait promptInput
return
;---------------------------------------------------------
;接続タイムアウト
;---------------------------------------------------------
:CONNECTTIMEOUT
fileopen errorLog logFile 1
filewrite errorLog hostname
filewrite errorLog ':'
filewrite errorLog timeoutMessage
filewrite errorLog #13#10
fileclose errorLog
errorCounter = errorCounter + 1
return
;---------------------------------------------------------
;エラーログファイル生成
;---------------------------------------------------------
:WRITEERROR
logFile = logDir
strconcat logFile mkdirName
strconcat logFile '\'
strconcat logFile errorFile
return
;---------------------------------------------------------
;ログイン先リストファイルを開く
;---------------------------------------------------------
:OPENLISTFILE
fileopen hosts listFile 0
return
;---------------------------------------------------------
;ログイン先リストファイルを閉じる
;---------------------------------------------------------
:CLOSELISTFILE
fileclose hosts
return
;---------------------------------------------------------
;終了処理
;---------------------------------------------------------
:ENDPROCESS
;エラーメッセージ
errorMessage = 'エラー数:'
int2str str errorCounter
strconcat errorMessage str
messagebox errorMessage 'マクロ終了'
return
②ログイン先リストファイル
(この下の行からをlist.csv として保存してください。)
#ホスト名,IPアドレス,ログインユーザ,ログインパスワード,ログイン時のプロンプト,enableパスワード(不要なら空白),ログ取得時のプロンプト,アクセス方法,コマンドリスト
R1,10.1.1.1,admin,testpw,R1>,enapw,R1#,ssh,cisco1.txt
R2,10.1.1.2,admin,testpw,R2>,enapw,R2#,ssh,cisco2.txt
R3,10.1.1.3,admin,testpw,R3>,enapw,R3#,telnet,cisco1.txt
R4,10.1.1.4,admin,testpw,R4#,,R4#,ssh,cisco2.txt
③コマンドリストファイル
(この下の行からをcisco1.txt として保存してください。)
ter len 0
show run
show ver