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

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

### はじめに

　以前投稿した、[teratermで踏み台サーバ経由の多段SSHを自動化する](https://qiita.com/k-shiroma/items/5d8c42437c4b93d350d1)の第2弾となります。

　以前の記事では、サーバのパスワードがべた書きになっていたり、1サーバにつき1つのサーバ接続用TTLファイルが存在していたので、そちらを改善していきます！

### 環境

　接続元の環境（クライアント）
　　OS：Widows 10
　　teratermのバージョン：4.106

　接続先の環境（サーバー）
　　OS：Linux（Red Hat Enterprise Linux Server release 7.6 (Maipo)）

### 本記事でできること

　ダブルクリックのみで、踏み台を経由し接続したいサーバへ接続ができます
![キャプチャ2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2166365/bf294fa1-1b54-fb9a-f060-ee032e4c4352.png)

### フォルダ構成

　前回の[teratermで踏み台サーバ経由の多段SSHを自動化する](https://qiita.com/k-shiroma/items/5d8c42437c4b93d350d1)と比較すると、接続先をプルダウンで選択できるようにしたので、幾分かすっきりしたフォルダ構成になりました。

　実際に接続する場合は、「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/