先日から各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の状態に合わせて修正して貰えれば。


Written by blacknon

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

Leave a Comment

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

*