概略
タイトルがマニアックですが、要は
1)ネットワーク内に管理したいルーターがたくさんある
2)各ルーターのConfigを取得してテキストへ保管したい
3)同じ処理を繰り返すので、マクロ(TTPMACRO)など活用で何とかしたい
という要件です。
管理端末から各ルーターへの疎通は当然できる状態で、
1.ログイン
2.ログ取得開始
3.CONFIGを表示する命令を実施
4.ログ取得終了
5.ログアウト
ができればOKとします。
マクロファイルの作り方
teratermインストールディレクトリに拡張子が.ttlのサンプルファイルがいくつかありますがそれを参考としました。
;マクロ例
;ホストのIPを指定。ルーターへはTelnet接続
HOST = '192.168.107.254'
ADDR = ''
LOGNAME = ''
;ホスト名を生成(ADDR)
strconcat ADDR HOST
strconcat ADDR ':23 /nossh /T=1'
;ログファイル名を生成
strconcat LOGNAME HOST
strconcat LOGNAME '.log'
connect ADDR
wait 'Password:'
sendln 'パスワードを記載'
wait '>'
sendln 'administrator'
wait 'Password:'
sendln 'パスワードを記載'
logopen logname 0 0
sendln 'show config'
wait '#'
logclose
sendln 'exit'
wait '>'
sendln 'exit'
あとはこれを.ttlファイルとしてttpmacro.exeで読み込ませるだけです
ホストもたくさんあるのだが
上記を改良していきます。今回は上部の「IPアドレス」だけを変えて、あとは同じ動作をするようにします。
アプローチとして
1)上位にバッチファイルをかませてバッチファイルで書き換えていく
2)TERATERMのマクロでホスト名ファイルを読込んで処理する
の1)が始めの想定でしたが、2)ができることが分かったので2)で実装します。
HOSTFILE='IPLIST.TXT'
fileopen fh HOSTFILE 0
:readloop
filereadln fh buf
if result goto loop_exit
HOST = ''
strconcat HOST buf
if result<>1 CALL MAIN_OPERATION
goto readloop
:loop_exit
fileclose fh
end
:MAIN_OPERATION
;HOST = '192.168.107.254' ループ側で指定される
ADDR = ''
LOGNAME = ''
;ホスト名を生成(ADDR)
strconcat ADDR HOST
strconcat ADDR ':23 /nossh /T=1'
;ログファイル名を生成
strconcat LOGNAME HOST
strconcat LOGNAME '.log'
connect ADDR
wait 'Password:'
sendln 'パスワードを指定'
wait '>'
sendln 'administrator'
wait 'Password:'
sendln 'パスワードを指定'
logopen logname 0 0
sendln 'show config'
wait '#'
;早すぎてログが出力されないケースがあるのでpauseを入れる
pause 1
logclose
sendln 'exit'
wait '>'
;コンソールを閉じるわけではないのでclosettへ変更
closett
return
サーバーに接続できない場合のケースや実行日時を記録するなど、まだまだ追加機能は必要そうですが一旦はこれで完了とします