TeraTermで踏み台サーバ経由の多段SSHを自動化する
TeraTermで踏み台サーバ経由の多段SSHを自動化する
はじめに
弊社ではセキュリティ上、サービスを提供しているサーバに直接接続するのではなく、踏み台を経由して接続することがルールとして定められています。
また、管理しているサーバが多く、サーバ毎のユーザもわかれているため、割と高い頻度で発生する作業に対し、毎度手動で踏み台に接続→対象サーバに接続を行うという単純作業がだんだんと苦になってしまいました。。。(笑)
なので、今回は踏み台を経由して対象サーバにSSHで接続するマクロを組んでみました!
※以下記事の情報を元にマクロを作成しています(環境毎に色を変えたり等一部変更しています)
・踏み台サーバを経由してログインするTeratermのマクロ
環境
Linux、Teraterm
本記事でできること
ダブルクリックのみで、踏み台を経由し接続したいサーバへ接続ができます
はじめに:フォルダ構成
一番上の階層に踏み台サーバの情報が記載された設定ファイル(springboard.ttl)があります。
connectinfo.datに関しては、初回接続時に自動で生成されるファイルです。
※次回からのログイン時はこのファイルのパスワード情報が使用されます。
それ以下の階層は、グループ分けしたサーバの接続情報を記載しています。
TTLマクロ_踏み台経由
│ connectinfo.dat パスワードファイル(自動生成)
│ springboard.ttl 踏み台情報
│
├─WEBサーバ
│ │ config.ttl 設定ファイル
│ │ connect.ttl 接続コマンド情報
│ │ hosts.ttl サーバ情報
│ │
│ ├─開発環境
│ │ ホスト名(例:web-dev-a).ttl サーバ接続用TTL
│ │ ホスト名(例:web-dev-b).ttl
│ │
│ └─本番環境
│ ホスト名(例:web-honban-a).ttl
│ ホスト名(例:web-honban-b).ttl
│
└─バッチサーバ
│ config.ttl
│ connect.ttl
│ hosts.ttl
│
└─開発環境
ホスト名(例:bat-dev-a).ttl
ホスト名(例:bat-dev-b).ttl
・・・
踏み台情報(springboard.ttl)
踏み台サーバのIPアドレスと、ログインユーザーを記載します。
パスワードに関しては、初回は入力が必要でそれ以降は自動生成される「connectinfo.dat」から参照します。
;;踏み台情報
; 踏み台サーバのIPアドレス
FUMIDAI = 'XXX.XXX.XXX.XXX'
;ユーザ、パスワード
LOGIN_USER='XXXXXX' ; 踏み台へのログインユーザ
PASS_FILE ='../../connectinfo.dat'
設定ファイル(config.ttl)
COMMON_IDとCOMMON_PASSに、ログイン先の共通ログインIDとパスワードをそれぞれ記載します。
※設定ファイル(config.ttl)と同じ階層にある環境への接続時に上記IDとパスワードが使用されます。
;ウインドウタイトル
PLACE='XXX環境'
COMMON_ID='XXXXXX' ; ログイン先の共通ログインID
COMMON_PASS='XXXXXX' ; ログイン先の共通ログインIDのパスワード
;INIファイルの読み込み有無 無:0 有:1
READ_INI=0
getdir CURDIR ; マクロの場所
;マクロファイルのベース名を作る
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_COLOR = COLOR[i]
break
endif
next
strcompare SERVER_IP '*'
if result=0 then
messagebox 'ホストが見つかりません' "エラーメッセージ"
end
endif
接続コマンド情報(connect.ttl)
接続時のコマンドを、組み立てたり、設定された背景色に変更したりしています。
;==============================================
;; 接続先ホスト/ユーザ名/パスワード設定
;LOGIN_USER = 'ユーザ名'
;; パスワードファイル指定
;LOGIN_PASS = 'パスワード'
;==============================================
;; パスワード取得
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
;; 接続
connect COMMAND
sprintf2 TITLE '%s(%s:%s)' PLACE SERVER_NAME SERVER_IP
settitle TITLE
sprintf2 SSH_LOGIN 'ssh -o StrictHostKeyChecking=no %s@%s' COMMON_ID SERVER_IP
sprintf2 SSH_SERVER_COLOR "echo -ne '%s'" SERVER_COLOR
wait '$'
sendln SSH_LOGIN
wait 'password:'
sendln COMMON_PASS
wait '~]$'
sendln SSH_SERVER_COLOR
end
サーバ情報(hosts.ttl)
接続したいサーバのホスト名、IPアドレスを記載します。
COLORの配列で文字色と背景色をカラーコードで指定できます。
例:#ffffff(白)
#000030(青)
#303000(黄)
#300000(赤)
; ホスト名、IPアドレスの2つの配列を定義する。
; strdimで宣言する要素数は2つとも同じにする。
; 各配列の順番は、関連している。
; 増減した時は、ELEMENT_NOの変更と、各配列の要素を調整する。
ELEMENT_NO=2
;接続先ホスト名選択
strdim HOSTEN ELEMENT_NO
;ホスト名(例:web-dev-a、web-dev-b)
HOSTEN[0] = 'web-dev-a'
HOSTEN[1] = 'web-dev-b'
strdim HOSTIP ELEMENT_NO
;IPアドレス
HOSTIP[0] = 'XXX.XXX.XXX.XXX'
HOSTIP[1] = 'XXX.XXX.XXX.XXX'
strdim COLOR ELEMENT_NO
COLOR[0] = '\e]10;#ffffff\a\e]11;#303000\a' ---文字色:#ffffff(白)、背景色:#303000(黄)
COLOR[1] = '\e]10;#ffffff\a\e]11;#303000\a'
サーバ接続用TTL(ホスト名(例:web-dev-a).ttl)
実際にサーバに接続する用のTTLファイル。
ファイル名はhosts.ttlのHOSTENで設定したホスト名と揃えてあげる必要があります。
include '../hosts.ttl'
include '../../springboard.ttl'
include '../config.ttl'
include '../connect.ttl'
補足!!!
やっと完成したttlをチームメンバーに共有したところ、正常に接続できる人とできない人が。。。。
確認すると、ttlファイルの関連付け先が間違っていることが原因でした。
普段起動させている方がオレンジの枠(ttermpro.exe)ですが、こちらと紐づいていると動きませんでした。。。
正しくは、赤枠(ttpmacro.exe)の方と紐づける必要があります。
ぱっと見、問題なく紐づいているように見えるため、原因の特定に苦戦しました。。。。
おわりに
サーバへの接続を自動化したことで、サーバ接続時のストレスがなくなりましたー!
今後の課題としては、現状サーバのパスワードがべた書きになってしまっているので、そちらも踏み台のパスワードと同様に暗号化したり、現状1サーバにつき1つのサーバ接続用TTLファイルが存在しているところを、ファイルを一つにまとめプルダウンで選択できるようにしていきたいです!
参考資料
踏み台サーバを経由してログインするTeratermのマクロ(最終閲覧日:2021年10月16日)
https://qiita.com/baoh0308/items/fcedfcf50f7e97cb4e39
Author And Source
この問題について(TeraTermで踏み台サーバ経由の多段SSHを自動化する), 我々は、より多くの情報をここで見つけました https://qiita.com/k-shiroma/items/5d8c42437c4b93d350d1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .