Tera Termマクロで[while , endwhile]の制御コマンドを使用し、繰り返し処理を実行する事で、複数ホストの機器情報(コマンド実行)を自動で取得する事ができるテラタームマクロをご紹介します。

ホスト一覧ファイルから順番にホスト情報(IPアドレス等)を読み込み、各ホストへ自動接続を行います。接続が完了すると、接続ホスト上で[uname –a][df –k]のコマンド実行を実行し、結果をホスト毎に分けたファイルに記録します。 (ホスト毎に取得ログを分けている所が肝になります)

またここでは、マクロ側でログ取得を制御します。

参考 ⇒ Tera Termマクロ-MACROで設定する自動ログ取得

「設定」メニューから「その他の設定」を選択し、「ログ」タブより「自動的にログ採取を開始する」のチェックを外しておいてください。
ssh-macro1301

もしこの設定が有効になっていると、マクロ側のログ取得よりこちらの設定が優先されますのでご注意を!

その他の機能の特徴としては、以下のようになっています。

①接続するホスト情報はファイルから読み込み
②接続ユーザ/パスワードは固定で設定
③各機器のログは、機器別にファイルを作成し保存

スポンサーリンク

SSH自動ログ取得マクロ

;========================================= 
; Filename    : ssh_connect-13.ttl 
; Description : SSH Auto login 
; Author      : JUNZOU
; Created     : 2011/04/24 
; modified    : 
;========================================= 
;; ホスト一覧ファイル指定 
HOSTFILE = 'C:\hostlist.txt' 
;; ユーザ名/パスワード設定 
USERNAME = 'ユーザ名' 
PASSWORD = 'パスワード' 
;; ログ保存先指定 
LOGSPATH = 'C:\logs\' 
;========================================== 
;; ①ホスト一覧ファイルオープン 
fileopen HOSTLIST HOSTFILE 0

;; ②ホスト一覧ファイルから接続ホスト(一行)読み込み 
filereadln HOSTLIST HOSTNAME

;; ③ホスト一覧ファイルのEOFまで繰り返し実行 
while result = 0 
;; ④空白行の場合、次の行を読み込む 
strlen HOSTNAME 
if result = 0 goto END 
;; ⑤先頭行がコメント(#)ではない場合、サブルーチン「SETSUZOKU」を実行 
strmatch HOSTNAME '^#'
if result <> 1 CALL SETSUZOKU

:END 
;; ⑥ホスト一覧ファイルからホスト名を読み込む 
filereadln HOSTLIST HOSTNAME 
endwhile

;; ⑦ホスト一覧ファイルクローズ 
fileclose HOSTLIST

;; ⑧マクロ終了 
end 
;=========================================

;; *****サブルーチン***** 
:SETSUZOKU 
;; ログファイル名の設定 
getdate LOG_NAME '%Y%m%d_%H%M%S_&h.log'
FULLPATH = LOGSPATH 
strconcat FULLPATH LOG_NAME

;; コマンド組立て 
COMMAND = HOSTNAME 
strconcat COMMAND ':22 /ssh /2 /auth=password /user=' 
strconcat COMMAND USERNAME 
strconcat COMMAND ' /passwd=' 
strconcat COMMAND PASSWORD

;; 接続 
connect COMMAND

;; 接続判定(接続出来ない場合はメッセージを表示しマクロ終了) 
if result <> 2 return

;; ログ取得開始 
logopen FULLPATH 1 1 
logwrite '*********************************'#13#10 
logwrite '■ホスト名 : ' 
logwrite HOSTNAME 
logwrite #13#10 
logwrite '*********************************'#13#10

;; 情報取得 
wait '$' '#' 
sendln 'uname -a' 
wait '$' '#'
sendln 'df -k' 
wait '$' '#' 
mpause 500 
closett 
return 
;; *****サブルーチン終わり*****

マクロ内容の解説

①ホスト一覧ファイルオープン

[fileopen]コマンドで接続先ホスト一覧ファイルを開いています。

[fileopen]コマンド書式(△はスペース)

fileopen△<file handle>△ホストリストファイル名△<append flag>

■解説
<file handle>
ファイルが正しくオープンされた場合、ファイルハンドルが整数変数<file handle> に格納されます。

<append flag>
0の場合、ファイルポインタの位置はファイルの始めにセットされます。0以外の場合、ファイルポインタはファイルの最後にセットされます。

<②ホスト一覧ファイルから接続ホスト(一行)読み込み

[filereadln]コマンドで、ホスト一覧ファイルからホスト情報(一行)を読み込み、変数[HOSTNAME]に格納しています。

[filereadln]コマンド書式(△はスペース)

filereadln△<file handle>△<strvar>

■解説
ファイルハンドル <file handle> で指定されるファイルから一行読み込む。読み込まれた行は、文字列変数 <strvar> に格納されます。

ホスト一覧ファイルは、1行に1ホストを記述してください。

C:\hostlist.txt 記述例)

=======================================
111.111.111.111
222.222.222.222
333.333.333.333
#444.444.444.444 ← コメント行の場合は、次の行を読み込みます
555.555.555.555
=======================================

③ホスト一覧ファイルのEOFまで繰り返し実行

[while]コマンドでファイルのEOFまで繰り返し処理を行います。

行を読んでいる間にファイルポインタがファイルの最後に達した場合、システム変数「result」に 1 が格納されます。それ以外の場合は 0 が格納されます。

改行のみの場合は、文字列変数は空となり、result には 0 が格納されます。

④空白行の場合、次の行を読み込む

[strlen]コマンドで、読み込んだ一行が空白(改行のみ)ではないかを確認しています。[strlen]コマンドは、文字列の長さを返すコマンドです。

戻り値がゼロ(空白)の場合は、次の行を読み込む処理に進みます。

⑤先頭行がコメント(#)ではない場合、サブルーチン「SETSUZOKU」を実行

[strmatch]コマンドで先頭文字がコメント「#」ではないか確認しています。[strmatch]コマンドは、正規表現によるパターンマッチングを行います。

先頭文字が#(コメント)の場合は次の行を読み込む処理に進みます。

コメントで無い場合は、サブルーチン「SETSUZOKU」を実行します。

ホスト一覧ファイルから接続ホスト(一行)読み込み

[filereadln]コマンドで、ホスト一覧ファイルから接続ホストを読み込んでいます。

⑦ホスト一覧ファイルクローズ

[fileclose]コマンドでホスト一覧ファイルを閉じる処理を行います。

⑧マクロ終了

[end]コマンドでマクロを終了させます。

サブルーチン「SETSUZOKU」部分

ホストリストファイルから読み込んだ情報でサーバにログインし、[uname –a]及び[df –k]コマンドの実行結果をファイルに記録しています。

取得ログは、ホスト別に分けて記録します。