Pocket

以前に複数台のマシンに対してコマンドを実行させるTeratermマクロを作成していたが、ある程度の完成形が出来たので掲載。

今回の改修内容は以下。

  1. host.listをマクロ実行時にファイル選択して指定するようにした。
  2. ログをマクロのあるフォルダに出力するようにした。
  3. コマンドを羅列したリストをマクロ実行時にファイル選択し、記述されているコマンドを実行させるようにした。

上記3点。
個人的には、「command.list」にコマンドを羅列しておけばいいので、実行したいコマンドを修正する際にマクロのコードをいじる必要がなくなったのが大きいかなと。
それは「host.list」の指定方法についても同じだけど。

以下に対象となるファイルの入力例とマクロのソースを記述する。

●host.list(任意のファイル名)

#HOST_NAME,HOST_IP,HOST_USER,HOST_PASS
AAA,172.26.15.240,aaauser,Password1
BBB,172.26.15.240,bbbuser,Password2
CCC,172.26.15.240,cccuser,Password3

host.listについては前回のものと同様。

●command.list(任意のファイル名)

df -h
free
vmstat
exit

command.listもあくまで一例。ここに記述するコマンドは自由に書き換えてもらって構わない。
ただしこのマクロで実行する上でのポイントとして、

  1. sudoは対応出来ない(パスワード入力のwaitに対応していないため)
  2. 一応、最後にexitを入れる

上記2点を考慮してもらいたい。

Sponsored Links

●一括コマンド実行.ttl

; [Before]========================

; Read File "HOST_FILE"
 Filenamebox 'File selection "Host List File"' 0
 If result<>0 Then
     HOST_FILE = INPUTSTR
 Endif

; Read File "COMMAND_FILE"
 Filenamebox 'File selection "Command List File"' 0
 If result<>0 Then
     COMMAND_FILE = INPUTSTR
 Endif

; Get Current Directory
 Getdir CurrentDir
 LOGSPATH = CurrentDir
 Strconcat LOGSPATH '\'

; 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

; Read from "HOST_FILE" To "HOST_LIST"
 Fileopen HOST_LIST HOST_FILE 0

; Read 1 line from "HOST_LIST" To "HOST_LIST_LINE".
; "HOST_LIST" move to the next line
 Filereadln HOST_LIST HOST_LIST_LINE

 While RESULT = 0
    Strlen HOST_LIST_LINE
    If RESULT = 0 Goto END

    Strmatch HOST_LIST_LINE '^#'
    If RESULT<>1 CALL CONNECT_PROCESS

; [END]===========================
:END
 Filereadln HOST_LIST HOST_LIST_LINE
 EndWhile
 Fileclose HOST_LIST
 End

; [CONNECT_PROCESS]===============
:CONNECT_PROCESS
 Strsplit HOST_LIST_LINE ','
 HOST_NAME = Groupmatchstr1
 HOST_IP   = Groupmatchstr2
 HOST_USER = Groupmatchstr3
 HOST_PASS = Groupmatchstr4

; 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 HOST_NAME
 Strconcat FULLPATH '.log'

; Remote Access Server(SSH Connect)
 MSG       = HOST_IP
 Strconcat MSG  ' /ssh /2 /nosecuritywarning /auth=password /user='
 Strconcat MSG HOST_USER
 Strconcat MSG ' /passwd='
 Strconcat MSG HOST_PASS
 Connect   MSG

; 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 HOST_NAME
 Logwrite #13#10
 Logwrite 'UserName:'
 Logwrite HOST_USER
 Logwrite 'Execution time :'
 Str_Get=Str_Getdate
 Strconcat Str_Get ' '
 Strconcat Str_Get Str_Gettime
 Logwrite Str_Get
 Logwrite #13#10
 Logwrite '*********************************'#13#10

 Wait_word = HOST_USER
 Strconcat Wait_word '@'

; Run Program

 Fileopen COMMAND_LIST COMMAND_FILE 0

; Read 1 line from "HOST_LIST" To "HOST_LIST_LINE".
; "HOST_LIST" move to the next line

 While 1
    Filereadln COMMAND_LIST COMMAND_LIST_LINE
    If RESULT = 1 Break

    Flushrecv
    Wait Wait_word
    Sendln COMMAND_LIST_LINE

 Endwhile
 Fileclose COMMAND_LIST
 Closett
 Return

なお、前回も記述したがこのマクロはTeratermのバージョンがバージョン4.67以降の対応になるので注意。

これでコマンド一括実行マクロはある程度まとまったかな?

 

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

This article has 2 comments

  1. Pingback: 複数台に対し同時にSSH接続、コマンドを実行する『Parallelssh』 | 俺的備忘録 〜なんかいろいろ〜

  2. Pingback: ログイン先を選択して自動ログインを行うTeratermマクロ | 俺的備忘録 〜なんかいろいろ〜

Leave a Comment

メールアドレスが公開されることはありません。