続 Teratermマクロで複数台のマシンに一括でコマンドを実行させる
2014/03/04 更に改良…
2014/02/26 追記
「host.list」にユーザ名、パスワードを記述する改良版を作成しました。
2014/03/04
更に改良を加え、外部host.listの他にコマンドを使用するコマンドを羅列したcommand.listを外部から読み込ませる方式に変更しました。また、host.listとcommand.listはマクロ実行時に選択させるようにしたので、Teratermマクロがわからない人でも使用可能。対象のマクロはこちら。
先日、何十台の同一構成で構築されたLinuxサーバに一括で同一コマンドを実行させる対応があったので、そのためのTeratermマクロを作成した。
参考にしたページは以下。
人見知りネットワークエンジニアのblog :TeraTermマクロでAlaxalA機器のログを取る
使用できる条件は以下。
別途ホスト一覧ファイルを用意し、それを読み込ませて実行させる方式。
ホスト名一覧は以下のように記述する。
●host.list
#Memo1 server_hostname1 192.168.0.100 #Memo2 server_hostname2 192.168.0.101
「host.list」で、ホスト名は1サーバにつき3行で構成される。
1行目にコメントを、2行目にホスト名を記述し、3行目にIPアドレスを記述する。
ホスト名はログの名称に使用されるので、実際の接続に使われるのはIPアドレスになる。
●一括コマンド実行.ttl
;[Before]===================================================== ; Get Host List HOSTFILE='C:\teraterm\hostlist.txt' ; UserName/Password USERNAME='root' PASSWORD='root' ; Log Folder LOGSPATH='C:\teraterm\log\' ; Get Date getdate Str_Getdate strcopy Str_Getdate 1 4 Str_Year strcopy Str_Getdate 6 2 Str_Mon strcopy Str_Getdate 9 2 Str_Day ; Get Time gettime Str_Gettime strcopy Str_Gettime 1 2 Str_Hour strcopy Str_Gettime 4 2 Str_Min strcopy Str_Gettime 7 2 Str_Sec ;[MAIN]======================================================= ; Open Host List fileopen HOSTLIST HOSTFILE 0 filereadln HOSTLIST HOSTNAME while result=0 strlen HOSTNAME if result=0 goto END ; Host List Line is Not Comment, Goto SubRoutine SSH_CONNECT strmatch HOSTNAME '^#' if result<>1 CALL SSH_CONNECT ;[END]======================================================== ; SubRoutine END :END filereadln HOSTLIST HOSTNAME endwhile ; Close Host List fileclose HOSTLIST ; Finish This Macro end ;[SSH_CONNECT]================================================ :SSH_CONNECT ; Write Log FULLPATH = LOGSPATH strconcat FULLPATH Str_Year strconcat FULLPATH Str_Mon strconcat FULLPATH Str_Day strconcat FULLPATH '_' strconcat FULLPATH Str_Hour strconcat FULLPATH Str_Min strconcat FULLPATH Str_Sec strconcat FULLPATH '_' strconcat FULLPATH HOSTNAME strconcat FULLPATH '.log' ; Remote Access Server(SSH Connect) filereadln HOSTLIST HOSTIP sh_connect=HOSTIP strconcat sh_connect ' /ssh /2 /nosecuritywarning /auth=password /user=' strconcat sh_connect USERNAME strconcat sh_connect ' /passwd=' strconcat sh_connect PASSWORD connect sh_connect ; Connet decision if result<>2 then strconcat FULLPATH '.error' filecreate ERRORFILE FULLPATH fileclose ERRORFILE closett return endif ; Log write logopen FULLPATH 1 1 logwrite '************************************************'#13#10 logwrite 'hostname :' logwrite HOSTNAME logwrite #13#10 logwrite 'username :' logwrite USERNAME logwrite #13#10 logwrite 'Execution time :' Str_Get=Str_Getdate strconcat Str_Get ' ' strconcat Str_Get Str_Gettime logwrite Str_Get logwrite #13#10 logwrite '************************************************'#13#10 logwrite #13#10 ; Run Program ; 1 wait '@' sendln 'df -h' ; 2 wait '@' sendln 'free' ; 3 wait '@' sendln 'dmidecode' ; Last wait '@' closett return
「Before」で指定している変数の値を設定して使う。
実際に一括実行させるコマンドは「Run Program」以下に記述する。
とまあ、こんな感じ。少々おそまつだけど、UNIX系OSに対し一括でコマンドを実行させたいけど、rshを有効にしていない時に有効となる。