マクロファイル名を元に接続するTeraTermマクロのパスワード保存ファイルが暗号化されていない場合のマクロです。参照元のマクロを以下のように変更する。
- パスワードファイルを変更する。
passwd_file = 'pass.dat'
- 変更後
passwd_file = 'pass.txt'
パスワードの取得処理を変更する。
getpassword passwd_path passwdkey password
変更後
tmp_passwdkey = '^'
strconcat tmp_passwdkey passwdkey
strconcat tmp_passwdkey '='
;パスワードファイルから情報取得
fileopen fhandle passwd_path 0
while 1
filereadln fhandle line
if result=1 then
messagebox 'ユーザとホストが登録されていません。' 'Error'
break
endif
strmatch line tmp_passwdkey
if result != 0 then
strlen matchstr
strremove line 1 result
password = line
break
endif
endwhile
fileclose fhandle
変更後のマクロファイル
;マクロファイル名で指定された接続を行う。
;
;マクロファイル名で「_」区切りで指定した、以下オプションで接続する。
; 接続先ホスト名(IPアドレス)_接続ユーザ名_ポート番号.ttl
; ※後続のオプションを指定しない場合、それ以降の「_」は不要。
;
;パスワードは暗号化しpasswd_pathで指定されるファイルに保存される。
;ファイル中にパスワードが保存されていれば、パスワード入力は不要。
;保存されていなければパスワード入力ウィンドウが表示され、入力を促される。
;パスワードに「"」、「 (スペース)」の両方を含む場合は、接続できない。
;
;ファイル名で「接続ユーザ名」「ポート番号」を指定しない場合、
;以下で指定する「ユーザ名」「ポート番号」を使用して接続する。
;ログインデフォルトのユーザ名を指定
username_default = 'root'
;ログインするデフォルトのポート番号を指定
port_default = '22'
;メインのディレクトリを指定
main_dir = 'D:\ソフト\TeraTerm\'
;パスワードファイルを指定
;このマクロでは、パスワードが平文で保存されているので使用する際には注意する。
;接続ユーザ名@接続ホスト名=パスワード
;の形式で記述しておくこと。
passwd_file = 'pass.txt'
passwd_path = main_dir
strconcat passwd_path passwd_file
;設定ファイルを指定
conf_file = 'conf\TERATERM.INI'
conf_path = main_dir
strconcat conf_path conf_file
;ログディレクトリを指定
log_dir = 'log\'
;マクロファイル名から拡張子(.ttl)除去
tmp_param1 = param1
strmatch tmp_param1 '\.ttl$'
if result != 0 then
strlen param1
needless = result - 3
strremove param1 needless 4
endif
strsplit param1 '_'
;strmatchで「groupmatchstr?」にグループマッチしたパターンが格納されるので退避
arg1 = groupmatchstr1
arg2 = groupmatchstr2
arg3 = groupmatchstr3
arg4 = groupmatchstr4
arg5 = groupmatchstr5
arg6 = groupmatchstr6
arg7 = groupmatchstr7
arg8 = groupmatchstr8
arg9 = groupmatchstr9
;main_dirの最後が「\」でない場合は、追加
tmp_main_dir = main_dir
strmatch tmp_main_dir '\\$'
if result = 0 then
strconcat main_dir "\"
endif
;ホスト名設定
hostname = arg1
strcompare "" hostname
if result = 0 then
msg = 'ホスト名が読み取れませんでした。'
messagebox msg "Error"
end
endif
sprintf2 connect_msg '接続先ホスト名\t:%s' hostname
;ユーザ名設定
username = arg2
strcompare "" username
if result = 0 then
call use_default_username
sprintf2 tmp_connect_msg "\n接続先ユーザ名\t:%s(デフォルト)" username
else
sprintf2 tmp_connect_msg "\n接続先ユーザ名\t:%s" username
endif
strconcat connect_msg tmp_connect_msg
;ポート番号設定
port = arg3
strcompare "" port
if result = 0 then
call use_default_port
sprintf2 tmp_connect_msg "\n接続先ポート番号:%s(デフォルト)" port
else
sprintf2 tmp_connect_msg "\n接続先ポート番号:%s" port
endif
tmpport = port
strmatch tmpport '[[:digit:]]'
if result = 0 then
msg = 'ポート番号が数値ではありません。:'
strconcat msg port
messagebox msg "Error"
end
endif
strconcat connect_msg tmp_connect_msg
;ファイル名中で無視される範囲を表示
strcompare "" arg4
if result != 0 then
msg = "オプション "
strconcat msg arg4
strcompare "" arg5
if result != 0 then
strconcat msg ' '
strconcat msg arg5
strcompare "" arg6
if result != 0 then
strconcat msg ' '
strconcat msg arg6
strcompare "" arg7
if result != 0 then
strconcat msg ' '
strconcat msg arg7
strcompare "" arg8
if result != 0 then
strconcat msg ' '
strconcat msg arg8
strcompare "" arg9
if result != 0 then
strconcat msg ' '
strconcat msg arg9
endif
endif
endif
endif
endif
strconcat msg ' は無視されます。'
messagebox msg "check"
endif
goto my_connect
:use_default_username
username = username_default
msg = 'ユーザ名が読み取れませんでした。デフォルトのユーザ='
strconcat msg username_default
strconcat msg 'で接続します。'
return
:use_default_port
port = port_default
msg = 'ポート番号が読み取れませんでした。デフォルトのポート番号='
strconcat msg port_default
strconcat msg 'で接続します。'
return
:my_connect
strspecial connect_msg
messagebox connect_msg "接続先確認"
;パスワードを取得
passwdkey = username
strconcat passwdkey '@'
strconcat passwdkey hostname
;パスワード検索文字列作成
tmp_passwdkey = '^'
strconcat tmp_passwdkey passwdkey
strconcat tmp_passwdkey '='
;パスワードファイルから情報取得
fileopen fhandle passwd_path 0
while 1
filereadln fhandle line
if result=1 then
messagebox 'ユーザとホストが登録されていません。' 'Error'
break
endif
strmatch line tmp_passwdkey
if result != 0 then
strlen matchstr
strremove line 1 result
password = line
break
endif
endwhile
fileclose fhandle
;TeraTermマクロconnectの仕様対応
;https://ttssh2.osdn.jp/manual/ja/macro/command/connect.htmlの注意2に以下の記述あり
;パスワードにはスペースを含むことが可能です。パスワードの中でスペースを表すには、パスワード全体を `"' で囲んでください。パスワードに " を含めるためには、連続した `"`("") を使用してください。
tmppassword = password
strreplace tmppassword 1 '"' '"""'
if result != 0 then
password = tmppassword
endif
tmppassword = password
strmatch tmppassword '.*\ .*'
if result != 0 then
password = '"'
strconcat password tmppassword
strconcat password '"'
endif
;接続文字列生成、および接続
myconnect = passwdkey
strconcat myconnect ':'
strconcat myconnect port
strconcat myconnect ' /ssh /auth=password '
strconcat myconnect ' /passwd='
strconcat myconnect password
connect myconnect
; ログを記録する
tmp_log_dir = log_dir
strmatch tmp_log_dir '\\$'
if result = 0 then
strconcat log_dir "\"
endif
log_file = main_dir
strconcat log_file log_dir
strconcat log_file username
strconcat log_file '@'
strconcat log_file hostname
getdate datetime '_%Y_%m%d_%H%M_%S'
strconcat log_file datetime
strconcat log_file '.log'
logopen log_file 0 1
;設定ファイル読み込み
restoresetup conf_path
0 件のコメント :
コメントを投稿