LoginSignup
0
1

More than 5 years have passed since last update.

踏み台サーバを経由してログインするTeratermのマクロ

Posted at

踏み台サーバを経由して、その先にあるサーバへ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に関連付けて下さい。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1