■テラタームマクロにて自動ログイン
Linux・Unixにこだわらず,テラタームマクロを用いてログインできるプログラムを作成した.
今回のプログラム内容
- 自動ログイン
- 自動ログ出力
- ログインユーザ名・パスワードを隠せる
- 2回目以降のログインを使い回せる
※Telnet接続限定
ディレクトリ構造
Qiitaにてプログラムを公開している.
※このページの一番下にプログラムを貼り付けたが,最新版はQiita先を参照すること.
上記のディレクトリ構造の通りに展開してくれれば使えるようになる.
別途用意する物
テラタームそのもの
login20160901.ttlファイルをテラタームマクロで読み込み,実行する必要がある.
そのとき,テラタームのバージョンは4.74以降が必要になる.
logディレクトリ
ディレクトリがありさえすればいい.
※自動ログ出力ディレクトリ
ファイル名:年月日時分秒_teraterm.log
dataディレクトリ
ディレクトリがありさえすればいい.
※ログインユーザ名・パスワードを隠蔽したファイルの格納先
ファイル名:password.dat
datディレクトリ
datディレクトリ配下のdatlogin.txtファイルを作成してもらう必要がある.
以下,テキストファイル内容例
1行目:タイトル(1文字目の★記号は必須)
8行目:1行目のタイトルと紐付く(2文字目以降全く同じであること)
9行目:ログイン先のIPアドレス(HOSTSの名前を用いてもOK)
10行目:ログイン先のログイン名を引き出すキー(ログイン名である必要は無い)
11行目:ログイン先のパスワードを引き出すキー(パスワードである必要は無い)
12行目:0固定
13行目:ログイン先の文字コード(1を記入後に文字コードを指定する)
※文字コードにこだわりが無ければ0だけを記入する(SJISになる).
※今回のマクロプログラムはEUC-jp・SJIS・UTF8の3種類に対応している.
注意:datlogin.txtファイルを開いている状態ではマクロが動かないため閉じること.
利用手順
1.マクロファイルの読み込み
2.ログインサーバの選択
※datlogin.txtファイルの★記号が付いた連続行を読み込む.
マクロ利用ユーザは,そこから先頭の番号(2文字目)をテキストボックスに打ち込み,OKボタンを押下する.
3.ログインユーザ名の入力
※datlogin.txtファイルに記入している文字列が表示される(10行目).
4.ログインパスワードの入力
※datlogin.txtファイルに記入している文字列が表示される(11行目).
5.ログイン完了
■作業完了後
ログの出力
logディレクトリ配下にログが出力される.不要であれば削除すること.
※TERATERM.INIファイルに,ログ出力先を記入していない場合に限る.
■ログイン失敗
エラー画面が表示され,テラタームマクロが終了される・・・はず.
■プログラム
※20160903時点
;***********************************************************************
;
;プログラム名:サーバ一覧からの選択後自動ログイン実施
;機能名 :テラタームログインマクロ
;ファイル名 :login20160901.tll
;文字コード :-
;機能概要 :サーバにテラタームを用いてログインするときに使用する.
; 一度ログインに成功した場合二度目以降は一覧から選ぶ
; だけでログインが完了する.
; ログイン先の文字コードも選択可能
;呼び出し形式:テラタームマクロから呼び出す
;戻り値 :キーボードからの入力を受け付ければ正常終了
; 入力を受け付けない場合バグがある.手動でテラタームごと終了すること.そしてマクロを直すか手動でログインし直す.
;
;ディレクトリ構造:
; テラタームマクロ(本ファイル).ttl
; |
; |---dat/
; | datlogin.txt ←ログイン用サーバ情報
; |
; |---data/
; | password.dat ←ログイン後に生成される
; |
; |---log/
; [年月日時分秒]_teraterm.log ←ログイン後に生成される
;
;作成者 :20160901 chesscommands
;改版履歴 :20160901 chesscommands 新規作成 R1.0
; :20160903 chesscommands インデント追加 R1.1
;
;***********************************************************************
getdir mcrodir_onDir
; ■ログインサーバを選択する
logintxtname = ''
makepath aaa mcrodir_onDir '¥dat¥datlogin.txt'
filesearch aaa
if 0 = result then
messagebox mcrodir_onDir 'debug'
messagebox 'file not' 'exit'
end
endif
mcrodir_datlogin = mcrodir_onDir
strconcat mcrodir_datlogin '¥dat'
setdir mcrodir_datlogin
fileopen fhandle 'datlogin.txt' 0
if 0 > fhandle then
messagebox 'file not' 'exit'
end
endif
show -1
txtTitleline = ''
txtline = ''
:loop
filereadln fhandle line
if 1 = result goto fclose
txtline = line
code2str starStr 33178
strmatch txtline starStr
if 0 < result then
strconcat txtTitleline txtline
strconcat txtTitleline #13#10
endif
goto loop
:fclose
fileclose fhandle
inputbox txtTitleline 'serverSelect'
str2int serverNumber inputstr
if 1 <> result then
exit
endif
mcrodir_datlogin = mcrodir_onDir
strconcat mcrodir_datlogin '¥dat'
setdir mcrodir_datlogin
fileopen fhandle 'datlogin.txt' 0
if 0 > fhandle then
messagebox 'file not' 'exit'
end
endif
txtTitleline = ''
txtline = ''
:loopSecond
filereadln fhandle line
if 1 = result goto fclose
txtline = line
str2int serverTitleLine txtline
if serverNumber = serverTitleLine then
goto loopexit
endif
goto loopSecond
:loopexit
filereadln fhandle rline
filereadln fhandle uline
filereadln fhandle pline
filereadln fhandle cline
filereadln fhandle eline
fileclose fhandle
mozjiicode = 'sjis'
str2int streline eline
if 1 = result then
if 1 = streline then
strlen eline
if 1 < result then
strcopy eline 2 result eeline
strcompare eeline 'EUC-JP'
if 0 = result then
mozjiicode = 'EUC'
endif
strcompare eeline 'Shift_JIS'
if 0 = result then
mozjiicode = 'SJIS'
endif
strcompare eeline 'UTF-8'
if 0 = result then
mozjiicode = 'UTF8'
endif
endif
endif
mozjiicode = 'SJIS'
endif
tellnet = ':23 /nossh /T=1 /NOLOG '
strconcat tellnet ' /KR='
strconcat tellnet mozjiicode
strconcat tellnet ' /KT='
strconcat tellnet mozjiicode
connectionserver = rline
strconcat connectionserver tellnet
connect connectionserver
; ■現在のリンク及び接続の状態を確認する
testlink
if 2 <> result then
messagebox 'link err' 'exit'
end
endif
showtt -1
; ■その他
enablekeyb 0
timeout = 5
getver version '4.74'
if 0 > result then
messagebox 'ver old' 'exit'
goto err_END
endif
goto gotoJump
:err_END
testlink
if 0 <> result then
closett
endif
end
:gotoJump
; ■ログを記録する
getdate logfileYmHHSlog '%Y%m%d%H%M%S_teraterm.log'
mcrodir_log = mcrodir_onDir
logtxtname = ''
strconcat logtxtname logfileYmHHSlog
strconcat mcrodir_log '¥log'
changedir mcrodir_log
logopen logtxtname 0 0 0 0 9
; ■パスワードファイルを読み込む
mcrodir_datFile = ''
mcrodir_datFile = mcrodir_onDir
strconcat mcrodir_data '¥data'
strconcat mcrodir_datFile mcrodir_data
setdir mcrodir_datFile
UsernamePrompt = 'login:'
UserIDname = 'ユーザ名('
strconcat UserIDname rline
strconcat UserIDname ')のKey('
strconcat UserIDname uline
strconcat UserIDname ')'
getpassword 'password.dat' UserIDname Username
PasswordPrompt = 'Password:'
PasswordKey = 'パスワード('
strconcat PasswordKey rline
strconcat PasswordKey ')のKey('
strconcat PasswordKey pline
strconcat PasswordKey ')'
getpassword 'password.dat' PasswordKey Password
wait UsernamePrompt
sendln Username
wait PasswordPrompt
sendln Password
settitle txtline
logpause
; ■1行取得
pause 2
sendln
flushrecv
sendln
recvln
waitregex '.*[^%]+.*[%]{1}.*' '.*[^$]+.*[$]{1}.*' '.*[^#]+.*[#]{1}.*' '[^.]*\$[^.]*' '[^.]*#[^.]*'
prompt = matchstr
if 5 < result then
messagebox 'err' 'exit'
goto err_END
endif
if 1 > result then
messagebox 'err' 'exit'
goto err_END
endif
sendln
strtrim prompt ''
flushrecv
sendln
wait prompt
if 1 <> result then
messagebox 'err' 'exit'
goto err_END
endif
;sendln ' set -o ignoreeof'
;sendln ' tabs -4'
;sendln ' alias hostname="uname -a"'
;sendln ' alias tarview="tar tvf "'
wait prompt
sendln
wait prompt
logstart
sendln
wait prompt
clearscreen 1
str2int strcline cline
if 1 = result then
if 1 = strcline then
strlen cline
if 1 < result then
strcopy cline 2 result ccline
sendln 'cd 'ccline
sendln
endif
endif
endif
str2int streline eline
if 1 = result then
if 1 = streline then
strlen eline
if 1 < result then
strcopy eline 2 result eeline
strcompare eeline 'EUC-JP'
if 0 = result then
callmenu 54011
callmenu 54111
endif
strcompare eeline 'Shift_JIS'
if 0 = result then
callmenu 54010
callmenu 54110
endif
strcompare eeline 'UTF-8'
if 0 = result then
callmenu 54013
callmenu 54113
endif
endif
endif
mozjiicode = 'SJIS'
endif
wait prompt
enablekeyb 1
sendln 'date'
showtt 1