LoginSignup
11
4

More than 1 year has passed since last update.

teratermで踏み台サーバ経由の多段SSHを自動化する Ver. 2

Posted at

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))

本記事でできること

 ダブルクリックのみで、踏み台を経由し接続したいサーバへ接続ができます
キャプチャ2.png

フォルダ構成

 前回の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」から参照します。

jump_server.ttl
 ;=====================================================================
 ; 踏み台接続情報
 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」から参照します。

connect.ttl
 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(赤)

hosts.ttl
 ;   プルダウン表示名、ユーザー名、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/

11
4
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
11
4