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