Pocket

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

具体的には、パスワード一括変更マクロで使用した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

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

 

Pocket

Written by blacknon

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

Leave a Comment

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