マクロファイル名を元に接続するTeraTermマクロ

以下の機能のTeraTermマクロを作成した。
  • マクロファイル名をで指定された接続を行う。
    • 「_」区切りで各オプションを指定する。接続ホスト名、接続ユーザ名、ポート番号の順で指定する。
    • 接続ユーザ名、ポート番号を指定しない場合、マクロファイル内で指定のデフォルトを使用する。
    • 接続ホスト名を指定しない場合は、エラーとなり接続せずに終了する。
    • オプションを指定しない場合、それ以降の「_」は不要。
  • 入力したパスワードは暗号化してファイルに保存する。(マクロ内の変数passwd_pathに保存される)ただし、パスワードに「"」、「 (スペース)」の両方を含む場合は、接続できない。
  • ログを自動で収集する。(マクロ内の変数log_fileに保存される)
  • マクロ内で指定の設定ファイルを読み込む。(マクロ内の変数conf_pathを読み込む)
;マクロファイル名で指定された接続を行う。
;
;マクロファイル名で「_」区切りで指定した、以下オプションで接続する。
; 接続先ホスト名(IPアドレス)_接続ユーザ名_ポート番号.ttl
; ※後続のオプションを指定しない場合、それ以降の「_」は不要。
;
;パスワードは暗号化しpasswd_pathで指定されるファイルに保存される。
;ファイル中にパスワードが保存されていれば、パスワード入力は不要。
;保存されていなければパスワード入力ウィンドウが表示され、入力を促される。
;パスワードに「"」、「 (スペース)」の両方を含む場合は、接続できない。
;
;ファイル名で「接続ユーザ名」「ポート番号」を指定しない場合、
;以下で指定する「ユーザ名」「ポート番号」を使用して接続する。
;ログインデフォルトのユーザ名を指定
username_default = 'root'
;ログインするデフォルトのポート番号を指定
port_default = '22'

;メインのディレクトリを指定
main_dir = 'D:\ソフト\TeraTerm\'
;パスワードファイルを指定
passwd_file = 'pass.dat'
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
getpassword passwd_path passwdkey password
;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 件のコメント :

コメントを投稿