teratermで踏み台サーバ経由の多段SSHを自動化する Ver. 2
はじめに
以前投稿した、teratermで踏み台サーバ経由の多段SSHを自動化するの第2弾となります。
以前の記事では、サーバのパスワードがべた書きになっていたり、1サーバにつき1つのサーバ接続用TTLファイルが存在していたので、そちらを改善していきます!
環境
接続元の環境(クライアント)
OS:Widows 10
teratermのバージョン:4.106
接続先の環境(サーバー)
OS:Linux(Red Hat Enterprise Linux Server release 7.6 (Maipo))
本記事でできること
ダブルクリックのみで、踏み台を経由し接続したいサーバへ接続ができます
フォルダ構成
前回のteratermで踏み台サーバ経由の多段SSHを自動化すると比較すると、接続先をプルダウンで選択できるようにしたので、幾分かすっきりしたフォルダ構成になりました。
実際に接続する場合は、「connect.ttl」を実行することで上記キャプチャのように接続ができます。
※プルダウンが長くなりすぎても見ずらいので、以下ではWEBサーバとバッチサーバとでフォルダを分けていますが、別段分けなくても大丈夫です。
TTLマクロ_踏み台経由
│ jump_server.ttl 踏み台接続用TTL
│ jump_server_password.dat 踏み台用パスワードファイル(自動生成)
│
├─WEBサーバ
│ connect.ttl 接続用TTL(利用時はこちらをダブルクリック)
│ hosts.ttl サーバ情報
│ server_password.dat サーバ用パスワードファイル(自動生成)
│
└─バッチサーバ
connect.ttl
hosts.ttl
server_password.dat
・・・
踏み台接続用TTL(jump_server.ttl)
踏み台サーバのIPアドレスと、ログインユーザーを記載します。
パスワードに関しては、初回は入力が必要でそれ以降は自動生成される「jump_server_password.dat」から参照します。
;=====================================================================
; 踏み台接続情報
HOSTNAME = 'XXX.XXX.XXX.XXX'
HOSTPORT = '22'
USERNAME = 'XXX'
;踏み台サーバーのPW保存ファイル
JUMP_SERVER_PASSFILE = '../jump_server_password.dat'
;=====================================================================
;; パスワード取得(初回は入力要)
getpassword JUMP_SERVER_PASSFILE USERNAME PASSWORD
; コマンドオプション組立て
COMMAND = HOSTNAME
strconcat COMMAND ':'
strconcat COMMAND HOSTPORT
strconcat COMMAND ' /ssh /2 /auth=password /user='
strconcat COMMAND USERNAME
strconcat COMMAND ' /passwd='
strconcat COMMAND PASSWORD
; 接続
connect COMMAND
接続用TTL(connect.ttl)
実際にサーバに接続する用のTTLファイル。「jump_server.ttl」を読み込み踏み台サーバに接続した後、listboxの方で接続先をプルダウンで表示させます。
この時、listboxの幅は「接続先を選択して下さい~」に記載されているメッセージの幅に左右されるので、適宜使いやすいように変更します。
またパスワードに関しては、こちらも初回は入力が必要で、それ以降は自動生成される「server_password.dat」から参照します。
include './hosts.ttl'
;接続先サーバーのPW保存ファイル
SERVER_PASSFILE = './server_password.dat'
/*--- 設定ここまで ---*/
; 接続
include '../jump_server.ttl'
;;listboxの幅は以下メッセージの幅に左右される
listbox '接続先を選択して下さい ' '接続先選択' viewlist
if result >= 0 then
viewname = viewlist[result]
hostname = hostlist[result]
username = userlist[result]
colortype = colorlist[result]
else
end
endif
sprintf2 TITLE '%s:%s' viewname hostname
settitle TITLE
sprintf2 SSH_LOGIN 'ssh -o StrictHostKeyChecking=no %s@%s' username hostname
sprintf2 SSH_SERVER_COLOR "echo -ne '%s'" colortype
wait '$'
sendln SSH_LOGIN
wait 'password:'
;; パスワード取得(初回は入力要)
getpassword SERVER_PASSFILE username PASSWORD
sendln PASSWORD
;;色設定
wait '~]$'
sendln SSH_SERVER_COLOR
end
サーバ情報(hosts.ttl)
プルダウンに表示させたい表示名、接続したいサーバのユーザー名、IPアドレスを記載します。
また、colorlistの配列で文字色と背景色をカラーコードで指定できます。
例:#ffffff(白)
#000030(青)
#303000(黄)
#300000(赤)
; プルダウン表示名、ユーザー名、IPアドレス、色設定の4つの配列を定義する。
; strdimで宣言する要素数は4つとも同じにする。
; 各配列の順番は、関連している。
; 増減した時は、element_noの変更と、各配列の要素を調整する。
element_no=10
/*--- プルダウン表示名 ---*/
strdim viewlist element_no
viewlist[0] ='(例)【開発】WEB_1号機';
viewlist[1] ='(例)【開発】WEB_2号機';
viewlist[2] ='(例)【検証】WEB_1号機';
viewlist[3] ='(例)【検証】WEB_2号機';
viewlist[4] ='(例)【本番】WEB_1号機';
viewlist[5] ='(例)【本番】WEB_2号機';
viewlist[6] ='(例)【本番】WEB_3号機';
viewlist[7] ='(例)【本番】WEB_4号機';
viewlist[8] ='(例)【本番】WEB_5号機';
viewlist[9] ='(例)【本番】WEB_6号機';
/*--- ユーザー名 ---*/
strdim userlist element_no
userlist[0] ='XXX';
userlist[1] ='XXX';
userlist[2] ='XXX';
userlist[3] ='XXX';
userlist[4] ='XXX';
userlist[5] ='XXX';
userlist[6] ='XXX';
userlist[7] ='XXX';
userlist[8] ='XXX';
userlist[9] ='XXX';
/*--- IPアドレス ---*/
strdim hostlist element_no
hostlist[0] ='XXX.XXX.XXX.XXX';
hostlist[1] ='XXX.XXX.XXX.XXX';
hostlist[2] ='XXX.XXX.XXX.XXX';
hostlist[3] ='XXX.XXX.XXX.XXX';
hostlist[4] ='XXX.XXX.XXX.XXX';
hostlist[5] ='XXX.XXX.XXX.XXX';
hostlist[6] ='XXX.XXX.XXX.XXX';
hostlist[7] ='XXX.XXX.XXX.XXX';
hostlist[8] ='XXX.XXX.XXX.XXX';
hostlist[9] ='XXX.XXX.XXX.XXX';
/*--- 色設定 ---*/
strdim colorlist element_no
colorlist[0] = '\e]10;#ffffff\a\e]11;#303000\a';
colorlist[1] = '\e]10;#ffffff\a\e]11;#303000\a';
colorlist[2] = '\e]10;#ffffff\a\e]11;#303000\a';
colorlist[3] = '\e]10;#ffffff\a\e]11;#300000\a';
colorlist[4] = '\e]10;#ffffff\a\e]11;#300000\a';
colorlist[5] = '\e]10;#ffffff\a\e]11;#300000\a';
colorlist[6] = '\e]10;#ffffff\a\e]11;#300000\a';
colorlist[7] = '\e]10;#ffffff\a\e]11;#300000\a';
colorlist[8] = '\e]10;#ffffff\a\e]11;#300000\a';
colorlist[9] = '\e]10;#ffffff\a\e]11;#300000\a';
おわりに
listboxを使用することで、フォルダ構成がすっきりしました!また、前回のマクロでは踏み台サーバのパスワードしか暗号化できていなかったため、今回でサーバのパスワードも暗号化できるようになりました!
参考資料
teratermで踏み台サーバ経由の多段SSHを自動化する(最終閲覧日:2022年5月17日)
https://qiita.com/k-shiroma/items/5d8c42437c4b93d350d1
Tera Termマクロコマンド「listbox」をさらに便利に!(最終閲覧日:2022年5月17日)
https://www.j-oosk.com/teraterm/macro-command/706/