踏み台サーバを経由して、その先にあるサーバへSSHでログインするマクロを作成してみた。
##ファイルの構成は、コンフィグ用のTTL(config.ttl)、ログイン先サーバのホスト一覧のTTL(hosts.ttl)、接続用コマンドのTTL(connect.ttl)、ホストを指定するためのTTL(xxxx.ttl)です。
1.config.ttlのxxxxxの部分を環境に合わせて編集します。
2.hosts.ttlを編集します。ELEMENT_NOは登録するホストの個数で、配列の要素数です。
- HOSTENは、英語のホスト名を指定します。このホスト名を使って後で、ホスト名.ttlを作成します。
- HOSTIPは踏み台の先の接続先サーバのIPアドレスを指定します。
- HOSTJPは、日本語のホスト名を指定します。タイトル表示用に使われます。
※HOTEN,HOSTIP,HOSTJPのインデックスは合わせてください
3.HOSTENで指定したサーバ名のttlファイルを作成します。例だとhost-a.ttlなど。host-x.ttlの中身は全て同じ3行です。ファイルをコピーして、リネームしましょう。
config.ttl
;ウインドウタイトル
PLACE='XXX環境'
FUMIDAI = 'xxx.xxx.xxx.xxx' ; 踏み台サーバのIPアドレス
;ユーザ、パスワード
LOGIN_USER='xxxxxx' ; 踏み台へのログインID
PASS_FILE = 'password.dat'
COMMON_ID='xxxxxxx' ; ログイン先の共通ログインID
COMMON_PASS='xxxxxx' ; ログイン先の共通ロスインIDのパスワード
;INIファイルの読み込み有無 無:0 有:1
READ_INI=1
getdir CURDIR ; マクロの場所
sprintf2 LOGDIR '%s\LOG' CURDIR ; マクロの場所のLOGディレクトリ
;マクロファイルのベース名を作る
strsplit param1 '.'
SERVER_NAME = groupmatchstr1 ; マクロファイル名から接続先サーバ名を作る
SERVER_IP='*'
for i 0 ELEMENT_NO-1 ; サーバ名からIPと日本語サーバ名を得る
strcompare SERVER_NAME HOSTEN[i]
if result=0 then
SERVER_IP = HOSTIP[i]
SERVER_JP = HOSTJP[i]
break
endif
next
strcompare SERVER_IP '*'
if result=0 then
messagebox 'ホストが見つかりません' "エラーメッセージ"
end
endif
;ログファイルパス
getdate LOGNAME '_%Y%m%d_%H%M%S.log'
sprintf2 LOGPATH '%s\%s(%s)%s' LOGDIR groupmatchstr1 SERVER_IP LOGNAME
foldercreate LOGDIR ; あってもなくてもディレクトリ作る
;読み込みINIファイルディレクトリ
;読み込みINIファイル名 ; カレントディレクトリのINIファイル
sprintf2 INI_NAME '%s_%s.ini' 'TERATERM' 'common'
makepath INI_PATH CURDIR INI_NAME
hosts.ttl
; ホスト名、ホスト名(日本語)、IPアドレスの3つの配列を定義する。
; strdimで宣言する要素数は3つとも同じにする。
; 各配列の順番は、関連している。
; 増減した時は、ELEMENT_NOの変更と、各配列の要素を調整する。
ELEMENT_NO=3
;接続先ホスト名選択
strdim HOSTEN ELEMENT_NO
HOSTEN[0] = 'host-a'
HOSTEN[1] = 'host-b'
HOSTEN[2] = 'host-c'
strdim HOSTIP ELEMENT_NO
HOSTIP[0] = '192.168.1.10'
HOSTIP[1] = '192.168.1.11'
HOSTIP[2] = '192.168.1.12'
strdim HOSTJP ELEMENT_NO
HOSTJP[0] = 'ホストA'
HOSTJP[1] = 'ホストB'
HOSTJP[2] = 'ホストC'
host-a.ttl,host-b.ttl,xxxxx-x.ttl
include 'hosts.ttl'
include 'config.ttl'
include 'connect.ttl'
connect.ttl
;==============================================
;; 接続先ホスト/ユーザ名/パスワード設定
;LOGIN_USER = 'ユーザ名'
;; パスワードファイル指定
;LOGIN_PASS = 'パスワード'
;; iniファイル指定
;INI_PATH = '設定ファイルパス'
;==============================================
;; パスワード取得
getpassword PASS_FILE LOGIN_USER LOGIN_PASS
;; コマンド組立て
COMMAND = FUMIDAI
strconcat COMMAND ':22 /ssh /2 /auth=password /user='
strconcat COMMAND LOGIN_USER
strconcat COMMAND ' /passwd='
strconcat COMMAND LOGIN_PASS
strconcat COMMAND ' /F='
strconcat COMMAND INI_PATH
;; 接続
connect COMMAND
logopen LOGPATH 0 1
sprintf2 TITLE '%s(%s:%s:%s)' PLACE SERVER_JP SERVER_NAME SERVER_IP
settitle TITLE
sprintf2 SSH_LOGIN 'ssh -o StrictHostKeyChecking=no %s@%s' COMMON_ID SERVER_IP
wait '$'
sendln SSH_LOGIN
wait 'password:'
sendln COMMON_PASS
4.作成した接続先サーバ用TTL(例だとhost-a.ttl)をダブルクリックしてTeratermのマクロを実行します。(関連付けできてなければttlファイルをttpmacro.exeに関連付けて下さい。