Tips : 踏台サーバ経由で複数サーバにエージェント転送するTeraTermマクロのサンプル

# はじめに
現在関わっているプロジェクトの作業で、踏台サーバ経由で複数台のサーバのログの確認を伴うテストを実施する必要があり、最初は１つずつTeraTermを立ち上げてエージェント転送するという作業を行っていたのですが、毎日行うのがだんだん面倒になってきてしまいマクロを作成いたしました。

# サンプル
pagentを利用する場合と、鍵認証を利用する場合の2種類のサンプルを用意いたしました。
## 1. Pagentを利用する場合

```teraterm:SAMPLE_agent_foward_macro_PAGENT.ttl
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;作成日 : 2019/10/18
;作成者 : nami_t
;概要   ; 踏み台サーバ経由で複数サーバにエージェント転送する。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;; pagent を利用する場合 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;踏み台サーバへの接続情報
username = '踏台サーバーへのログインユーザ名'
hostname = '踏台サーバのIPアドレス'

msg = hostname
strconcat msg ':22 /ssh2 /auth=publickey /user='
strconcat msg username
;pagent利用 ----------------------------------------------------------
strconcat msg ' /auth=pageant'
;エージェント転送 : ON -----------------------------------------------
strconcat msg ' /ssh-A'
;エージェント転送 : 確認ダイアログを出力しない -----------------------
strconcat msg ' /ssh-agentconfirm=off'


;配列ipを宣言(6台） ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
strdim ssh_fwd_ip 6


;SSH転送先サーバ(6台） ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;サーバ1 -------------------------------------------------------------
ssh_fwd_ip[0] = '転送先サーバ1のIPアドレス'
;サーバ2 -------------------------------------------------------------
ssh_fwd_ip[1] = '転送先サーバ2のIPアドレス'
;サーバ3 -------------------------------------------------------------
ssh_fwd_ip[2] = '転送先サーバ3のIPアドレス'
;サーバ4 -------------------------------------------------------------
ssh_fwd_ip[3] = '転送先サーバ4のIPアドレス'
;サーバ5 -------------------------------------------------------------
ssh_fwd_ip[4] = '転送先サーバ5のIPアドレス'
;サーバ6 -------------------------------------------------------------
ssh_fwd_ip[5] = '転送先サーバ6のIPアドレス'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


for i 0 5
    ;踏み台サーバへ接続
    connect msg

    ;プロンプトを待つ
    wait "$"
    
    ;転送先サーバへ接続
    sendln 'ssh ' ssh_fwd_ip[i]

    testlink
    
    ;TeraTermのウィンドウを切り離す
    unlink
    
next


;マクロ終了
end

```

## 2. 鍵認証を利用する場合

```teraterm:SAMPLE_agent_foward_macro_KEY_FILE.ttl
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;作成日 : 2019/10/18
;作成者 : nami_t
;概要   ; 踏み台サーバ経由で複数サーバにエージェント転送する。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;; 鍵認証を利用する場合 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;踏み台サーバへの接続情報
username = '踏台サーバーへのログインユーザ名'
hostname = '踏台サーバのIPアドレス'
;鍵認証利用（各自の環境に合わせて鍵ファイルのパスを指定） ------------
keyfile = 'C:\xxxxx\yyyyy\zzzzz.ppk'

msg = hostname
strconcat msg ':22 /ssh2 /auth=publickey /user='
strconcat msg username
;pagent利用 ----------------------------------------------------------
;strconcat msg ' /auth=pageant'
;エージェント転送 : ON -----------------------------------------------
strconcat msg ' /ssh-A'
;鍵認証
strconcat msg ' /keyfile='
strconcat msg keyfile
;エージェント転送 : 確認ダイアログを出力しない -----------------------
strconcat msg ' /ssh-agentconfirm=off'


;配列ipを宣言(4台） ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
strdim ssh_fwd_ip 4


;SSH転送先サーバ(4台） ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;サーバ1 -------------------------------------------------------------
ssh_fwd_ip[0] = '転送先サーバ1のIPアドレス'
;サーバ2 -------------------------------------------------------------
ssh_fwd_ip[1] = '転送先サーバ2のIPアドレス'
;サーバ3 -------------------------------------------------------------
ssh_fwd_ip[2] = '転送先サーバ3のIPアドレス'
;サーバ4 -------------------------------------------------------------
ssh_fwd_ip[3] = '転送先サーバ4のIPアドレス'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


for i 0 3
    ;踏み台サーバへ接続
    connect msg

    ;プロンプトを待つ
    wait "$"
    
    ;転送先サーバへ接続
    sendln 'ssh ' ssh_frd_ip[i]

    testlink
    
    ;TeraTermのウィンドウを切り離す
    unlink
    
next


;マクロ終了
end

```
# おわりに
このマクロを利用することで、毎日の作業が地味に楽になりました。
似たような状況でお困りの方にも参考になれば幸いです。

# 参考サイト
- https://humo-life.net/blog/tool/778/