2017/02/18

バージョン管理するのもつらいし、ソース等はGitHubに移動することにした。 利用するのであれば、そちらを参照してもらったほうがいいと思う。


今やっている仕事で作業の効率化を行うために、Teratermでのログイン先を選択して自動的にログインを行うマクロを作成した。 どうもこの現場ではコマンドの実行は自動化させるとNGのようなので、とにかくログインを行うところだけに特化させる。

方式としては、別途ホスト名、IPアドレス、ログインを行うユーザ名、パスワードを記述したhost.listをマクロ実行時に読み込ませ、ログインを行うホスト名を選択。そのままログインを行うというもの。 host.listの形式は以前作成した連続してサーバにログインし、コマンドを自動実行するマクロと同様のものだ。

まずはhost.listの内容例から。

●host.list

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

次にマクロ。

;============================================
; Filename : SSH_AutoLogin.ttl
; Description : SSH Auto login - host selection listbox from host.list
; Author : Blacknon
; Created : 2014/10/10
; modified :
;============================================
;; ホストファイルの選択
 Filenamebox '"ホストファイル"を選択してください' 0
 If result<>0 Then
 HOST_FILE = INPUTSTR
 Endif

;; ログ作成用にカレントディレクトリの情報を取得する
 Getdir CurrentDir
 LOGSPATH = CurrentDir
 Strconcat LOGSPATH '\'

;; ログ名に利用する日付情報を取得する
 Getdate Str_Getdate
 Strcopy Str_Getdate 1 4 Str_Year
 Strcopy Str_Getdate 6 2 Str_Mon
 Strcopy Str_Getdate 9 2 Str_Day

;; ログ名に利用する時刻情報を取得する
 Gettime Str_Gettime
 Strcopy Str_Gettime 1 2 Str_Hour
 Strcopy Str_Gettime 4 2 Str_Min
 Strcopy Str_Gettime 7 2 Str_Sec

;; ホストファイルの行数を取得する
 Fileopen HOST_LIST HOST_FILE 0
 i = 0
 While
 Filereadln HOST_LIST HOST_LIST_LINE
 If result=1 Then
 Break
 Endif
 i=i+1
 EndWhile

;; 配列を作成
 Strdim HOST_NAME i
 Strdim HOST_IP i
 Strdim HOST_USER i
 Strdim HOST_PASS i

;; "HOST_FILE"から"HOST_LIST"に展開
 Fileopen HOST_LIST HOST_FILE 0
 i = 0
 While
 Filereadln HOST_LIST HOST_LIST_LINE
 ; 処理を抜けるz
 If result=1 Then
 Break
 Endif

 ; Splitを行い、HOST_NAME、HOST_IP、HOST_USER、HOST_PASSに分割する
 Strmatch HOST_LIST_LINE '^#'
 If RESULT<>1 Then
 Strsplit HOST_LIST_LINE ','
 HOST_NAME[i] = Groupmatchstr1
 HOST_IP[i] = Groupmatchstr2
 HOST_USER[i] = Groupmatchstr3
 HOST_PASS[i] = Groupmatchstr4
 i=i+1
 Endif
 Endwhile

;; ホスト選択画面を表示させる
 listbox 'Please Select Host' 'Select HOST' HOST_NAME
 If result >= 0 then
 HOST_CONNECT_NAME = HOST_NAME[result]
 HOST_CONNECT_IP = HOST_IP[result]
 HOST_CONNECT_USER = HOST_USER[result]
 HOST_CONNECT_PASS = HOST_PASS[result]
 Else
 End
 Endif

 COMMAND = HOST_CONNECT_IP
 Strconcat COMMAND ':22 /ssh /2 /auth=password /user='
 Strconcat COMMAND HOST_CONNECT_USER
 Strconcat COMMAND ' /passwd='
 Strconcat COMMAND HOST_CONNECT_PASS
 Connect COMMAND

 ; ログの記録を行う
 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_CONNECT_NAME
 Strconcat FULLPATH '.log'
 Logopen FULLPATH 0 1 1 1
 End

とりあえずこんな感じかなぁ。 なんとか説得して、コマンドもコマンドファイルを選択させて自動実行させるようにしてしまいたいものだ…