忘れかけのIT備忘録

今まで学んできた知識や小技、なるほど!と思ったことをメモするブログです。

TeraTermのSSH自動ログインマクロ

新しい現場に行くたびにTeraTermSSH自動ログインマクロが必要になるシチュエーションが多いのでここに残します。
使い方は非常に簡単、マクロを起動して「ログインユーザの選択」→「ログインサーバの選択」を実施します。
ログインユーザとログインサーバは、それぞれ設定ファイルに記述して動的に対応できるようにしています。
このログインマクロを作成した主な目的は2つ。
・毎回手動でサーバへログインしなくて済む
・ログファイル名に作業名を付けることができるので何のためにログインしたのか分かりやすい

マクロ本体のコード
;***************************************
; 環境設定
;***************************************
; ホスト一覧
include 'C:\Users\hogehoge\Desktop\work\ログインマクロ\config\hostlist.conf'

; ログインユーザ一覧
include 'C:\Users\hogehoge\Desktop\work\ログインマクロ\config\userlist.conf'

; 設定INIファイル ttermpro.exe が配置されている場所に配置すること
strdim INILIST 2
INILIST[0] = 'ini_node1.ini'
INILIST[1] = 'ini_node2.ini'

;***************************************
; 接続先ホスト選択
;***************************************
listbox '接続するホストを選択して下さい' '接続ホスト選択' HOSTNM
if result >= 0 then
  HOSTADDR = HOSTIPLIST[result]
  INIFILE = INILIST[result]
else
  end
endif

;***************************************
; ログインユーザ選択
;***************************************
listbox 'ログインするユーザを選択して下さい' 'ログインユーザ選択' USERLIST
if result >= 0 then
  USERNAME = USERLIST[result]
  PASSWORD = USERPWLIST[result]
else
  end
endif

;***************************************
; コマンド組み立て
;***************************************
COMMAND = HOSTADDR
strconcat COMMAND ':22 /ssh /2 /auth=password /user='
strconcat COMMAND USERNAME
strconcat COMMAND ' /passwd='
strconcat COMMAND PASSWORD
strconcat COMMAND ' /F='
strconcat COMMAND INIFILE

;***************************************
;ログ保存先
;***************************************
logdir='C:\teraterm_logs'
inputbox 'このターミナルで実施する作業名を入力して下さい。' '作業名入力'
WORK_NAME=inputstr
LOG_FILE=logdir

;***************************************
;ログ保存フォルダ(年月)作成
;***************************************
getdate DIR_NAME '\%Y%m'
strconcat LOG_FILE DIR_NAME

foldersearch LOG_FILE
if result = 0 then
  foldercreate LOG_FILE
  if result <> 0 then
    messagebox 'すでにフォルダが存在しています。' 'フォルダ作成エラー'
    end
  endif
endif

;***************************************
;ログ保存フォルダ(年月日)作成
;***************************************
getdate DIR_NAME_YMD '\%Y%m%d'
strconcat LOG_FILE DIR_NAME_YMD

foldersearch LOG_FILE
if result = 0 then
  foldercreate LOG_FILE
  if result <> 0 then
    messagebox 'すでにフォルダが存在しています。' 'フォルダ作成エラー'
    end
  endif
endif

;***************************************
;ログファイル名
;***************************************
getdate LOG_NAME '\%Y%m%d_%H%M%S_&h_'
strconcat LOG_NAME WORK_NAME
strconcat LOG_NAME '.log'
strconcat LOG_FILE LOG_NAME

;***************************************
;接続
;***************************************
connect COMMAND
if result <> 2 then
  messagebox 'サーバへ接続できませんでした。'
  end
endif

;***************************************
;ログ取得開始
;***************************************
logopen LOG_FILE 0 1 0 1 0
wait '$' '#'

end

設定ファイル
●hostlist.conf(ホスト一覧)
; サーバ名
strdim HOSTNM 2
HOSTNM[0] = 'Node1'
HOSTNM[1] = 'Node2'

; サーバのIPアドレス
strdim HOSTIPLIST 2
HOSTIPLIST[0] = 'xxx.xxx.xxx.xxx'
HOSTIPLIST[1] = 'yyy.yyy.yyy.yyy'

●userlist.conf(ログインユーザ一覧)
; ログインユーザ
strdim USERLIST 3
USERLIST[0] = 'root'
USERLIST[1] = 'hoge1'
USERLIST[2] = 'hoge2'

; ログインパスワード
strdim USERPWLIST 3
USERPWLIST[0] = 'xxxxxxxx'
USERPWLIST[1] = 'xxxxxxxx'
USERPWLIST[2] = 'xxxxxxxx'

※設定ファイルにログインパスワードを書くのはセキュリティ的に良くない場合もあるので、そういうときは「passwordbox」関数を使って手動でパスワードを入力する等の改修が必要です。
(例)
passwordbox 'please input user password.' 'get password'
if result > 0 then
  USERNAME = USERLIST[result]
  PASSWORD = inputstr
else
  end
endif
→入力されたパスワード文字列は「inputstr」変数に格納される