以前記述したパスワード一括変更のマクロに対して、パスワードが確かに変更されていることを確認するマクロを作成してみた。

具体的には、パスワード一括変更マクロで使用したuserlist.txtを用いてひたすらにログインを繰り返すというもの。

ユーザ名とパスワードが違う場合、Teratermのエラーウィンドウが表示され処理が停止されるというもの。あまり親切な動きにはなっていないので注意。

●userlist.txt

test01,Testpw01
test02,Testpw02
test03,Testpw03
test04,Testpw04
test05,Testpw05
test06,Testpw06
test07,Testpw07
test08,Testpw08
test09,Testpw09
test10,Testpw10

先ほども書いたが、ユーザリストはパスワード一括変更マクロと同じもの。
次はスクリプト。

Sponsored Links

●passwd_check_batch.TTL

; [Before]========================  
; Input Host name
Inputbox 'Please input an IP address or the host name.' 'Host information input'
HOST_ADDR = INPUTSTR
Strlen HOST_ADDR 
If result = 0 then 
Messagebox 'Host information is not input.' 'Input error' 
End 
Endif 
; Read File "USER_LIST"
Filenamebox 'File selection "User List File"'
If result<>0 Then
USER_LIST_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 USER_LIST USER_LIST_FILE 0
; Read 1 line from "HOST_LIST" To "HOST_LIST_LINE".
; "HOST_LIST" move to the next line
Filereadln USER_LIST USER_LIST_LINE
While RESULT = 0
Strlen USER_LIST_LINE 
If RESULT = 0 Goto END
Strmatch USER_LIST_LINE '^#'
If RESULT<>1 CALL CONNECT_PROCESS
; [END]===========================
:END
Filereadln USER_LIST USER_LIST_LINE
EndWhile
Fileclose USER_LIST
End
; [CONNECT_PROCESS]===============
:CONNECT_PROCESS
Strsplit USER_LIST_LINE ','
HOST_USER = Groupmatchstr1
HOST_PASS = Groupmatchstr2
; Remote Access Server(SSH Connect)
MSG       = HOST_ADDR
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
; 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_ADDR
Strconcat FULLPATH '_'
Strconcat FULLPATH HOST_USER
Strconcat FULLPATH '.log'
; Log write
Logopen FULLPATH 1 1
Logwrite '*********************************'#13#10
Logwrite 'Hostname:'
Logwrite HOST_ADDR
Logwrite #13#10
Logwrite 'UserName:'
Logwrite HOST_USER
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
Wait_word1 = '# ' 
Wait_word2 = '$ ' 
Pass_Wait_word = ':'
; Read 1 line from "HOST_LIST" To "HOST_LIST_LINE".
; "HOST_LIST" move to the next line
timeout = 10 
Wait Wait_word1 Wait_word2
if result = 0 then 
disconnect
end
Logwrite 'Password for this user is wrong.'
endif
Sendln 'exit'
Closett
Return

以上。
本当に簡単なマクロなので、もうちょっと改良ができそうな気もするけど…面倒だなぁ…

 


Written by blacknon

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

Leave a Comment

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

*