Pocket

先日から各OSでの複数ユーザのパスワード変更方法について調べていたんだけど、HP-UXでの対処でつまずいてしまった。

というのが、LinuxやSolarisと違い、HP-UXにはchpasswdコマンド及びそれに相当するコマンドが存在しないのだ。このため、passwdコマンドで対話的にパスワード設定してあげなければならない。

一応、useraddコマンドでユーザ作成時にパスワードを設定する方法もあるにはあるけど、暗号化済のものを入力しないといけないし、結局useradd時に設定してもユーザが有効にならない。
usermodでの設定も同様だった。

Expectをインストールしてスクリプトを組む方法もあるようだけど、実験した際はspawnがうまく動作せず失敗。

というわけで、もうHP-UX側の機能でパスワード自動設定を行わせるのは諦めてTeratermマクロで実装させる事にした。(Expectに関してはいつかリベンジするが)

以前に記述したSSH自動ログインマクロと同じく、ユーザ/パスワードを記述した外部ファイルを参照させて設定させていく方式を取る。

まずはユーザリストから。

●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_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
 
; Input User name
 Inputbox 'Please input Login User name.' 'User name input' 
 HOST_USER = INPUTSTR
 Strlen HOST_USER 
 If result = 0 then 
    Messagebox 'User name is not input.' 'Input error' 
    End 
 Endif
 
; Input Password
 Passwordbox 'Please input Login User Password.' 'Password input' 
 HOST_PASS = INPUTSTR
 Strlen HOST_PASS 
 If result = 0 then 
    Messagebox 'Password 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
  
  
; Write Log
 FULLPATH  = LOGSPATH
 Strconcat FULLPATH HOST_ADDR
 Strconcat FULLPATH '.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 '.log'
    
; 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
    
; Log write
 Logopen FULLPATH 1 1
 Logwrite '*********************************'#13#10
 Logwrite 'Hostname:'
 Logwrite HOST_ADDR
 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 = '# ' 
 Pass_Wait_word = ':'
  
  
  
  
  
; Run Program
 Fileopen USER_LIST USER_LIST_FILE 0 
   
; Read 1 line from "HOST_LIST" To "HOST_LIST_LINE".
; "HOST_LIST" move to the next line
   
 While 1
    Filereadln USER_LIST USER_LIST_LINE
    Strsplit USER_LIST_LINE ','
    C_USER = Groupmatchstr1
    C_PASS = Groupmatchstr2
     
    If RESULT = 1 Break
      
    Flushrecv
    Wait Wait_word
    Sendln "passwd " C_USER
     
    Wait Pass_Wait_word
    Sendln C_PASS
 
    Wait Pass_Wait_word
    Sendln C_PASS
  
 Endwhile
 Wait Wait_word
 Sendln 'exit'
 Fileclose USER_LIST
 Closett

Wait_wordのとこはHP-UX用になっているので、使用するOSの状態に合わせて修正して貰えれば。

Pocket

Written by blacknon

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

Leave a Comment

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