目的別 sshクライアント設定 (TeraTerm 5.73,5.80 , OpenSSH 5.2p1)

writen in utf-8 S.Kato ONICOS and Graph.K '12/02/24
Last Updated: since 2014/02/22

Tera Term 4.80 (SVN# 5451), OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010, CentOS release 6.2 (Final), Debian 7.1 : Linux mandd 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1 x86_64 GNU/Linux, Mac OS X 10.8, WinSCP 5.7.5

0. 構成その他

急ぎの時に「sshクライアント設定 (TeraTerm 5.73,5.80 , OpenSSH 5.2p1)」の本文を読むのがかったるいので、目的別に列挙しなおします。'17/05/06
接続のパターンとしては、3が使いやすいと思います。

0.1 注意事項など

0.2 更新履歴

以下の更新作業をしています。作業中です。すみません。'18/02/23
何とか編集終わったつもりです。'18/02/25

0.3 単純な動作モデル

一番単純な構成です。
クライアントから直接目的のサーバ(terget server)にログインし、ローカルのhttpを転送する場合の図です。
Windows の場合は TeraTerm を良く利用しますが、PuTTy もあります。
Linux、Cygwin、Mac の場合は sshコマンド を利用できます。
(Windows 10 の bash でも sshコマンド が標準で利用できました。検証していません。'18/02/25 s.kato)


ssh_simple_model.puml ← pumlのプラグインを入れてあればイメージファイル(png)と同じ図が出てきます。

0.4 ヒント

1. sshのログインパターン

TeraTermは多段のログインのオプションを書けるか未調査です。ドキュメントを見る限りではログイン先で ssh などのコマンドを実行する他に手は無いように見えます。
多段の場合、 ssh の config(~/.ssh/config) を利用したほうが便利です。


ssh_login_w_jump.uml

1.1 ターゲットに直接ログイン - gatway.ttl

図「ログインのパターン」の 「1 ターゲットに直接ログイン」のマクロです。
gatway.onicos.com に ポート1022 で ssh で接続するだけのシンプルなマクロです。
ユーザ認証は auth で キー認証を指定し、 keyfile で プライベートキーを指定します。

; gatway.onicos.com
; gatway.ttl
; '14/03/01 s.kato

connect 'gatway.onicos.com:1022 /ssh /auth=publickey /user=katosa /keyfile="d:\user\kato_sa\admin\ssh\gatway_rsa"'

1.2 ジャンプサーバ経由でログイン

TeraTermの場合はログイン先でプロンプトを待ち sshコマンド を実行するマクロを作成します。
sshコマンドの場合は ProxyCommand で ssh コマンドを実行するようにします。
具体的なマクロや定義方法は「ポート転送」のやり方を説明を参照してください。
(1.3 複数のジャンプサーバ経由でログイン も後述します。)

2. ポート転送のパターン


ssh_port_forwarding.uml

ポートの転送には大きく2種類の方法があります。

  1. ターゲットにログインしてターゲットのローカルのポートを転送する
  2. ジャンプサーバなどをエンドノードとしてターゲットに対するポートを転送する

http(80)やhttps(443)をローカルで利用する必要がある場合はTeraTermやsshを管理者権限で実行する必要があります。
図の 「2. 管理者権限でジャンプサーバをエンドノードにして利用」はその模式図です。

2.1 jump server(gateway)からターゲットへ接続 - gatway_tergetdev.ttl

クライアントの 8080 を gatway の 80 にポートフォワードした後、ターゲットへ ssh でログインします。

2.1.1 TeraTermのマクロ

/ssh-L8080:localhost:80 の localhost にブラウズしたいノードアドレスを記述すれば、そのサーバの80番をクライアントのローカルポート(8080)でブラウズできます。
connect で jump server に接続し、その下にあるwait '$' でログインプロンプトを待ち、ssh コマンドで一段先のサーバに接続します。

gateway.ttlとした場合の例

; connect to terget via jump server (gatway.xxxx.com)
; '14/03/01 s.kato

connect 'gatway.xxxx.com:1022 /ssh /auth=publickey /user=katosa /keyfile="d:\user\kato_sa\admin\ssh\gatway_rsa" /ssh-L8080:localhost:80'

wait '$'
sendln 'ssh terget'
settitle 'dev01-terget'

terget.xxxx.co.jp をブラウズする場合の connect の行

connect 'gatway.xxxx.com:1022 /ssh /auth=publickey /user=katosa /keyfile="d:\user\kato_sa\admin\ssh\gatway_rsa" /ssh-L8080:terget.xxxx.co.jp:80'

2.1.2 gatewayのための .ssh/config の例

ここでは jump server (gateway) に置いておく想定です。
この構成はゲートウェイで保護された Web サーバのテストなどで利用できます。
ServerAliveInterval は接続時のタイムアウトを防止するために設定しています。20秒はサーバの負荷を考えると少し短いかもしれません。

Host terget
        Hostname        terget.xxxx.co.jp
        User            katosa
        IdentityFile    ~/.ssh/terget_rsa
        ServerAliveInterval 20

3 gatewayから terget の80をブラウズ


ssh_3_1_port_forwarding.puml

2で少し書きましたが、ssh-Lオプションでゲートウエイからアクセスできるサーバを指定することで、ローカルからブラウズできます。

3.1 TeraTermのマクロ

以下のttlは jump server (gateway) の .ssh/config に Host terget が設定されていることが前提です。

; connect dev01-terget via gatway.onicos.com
; gatway_tergetdev.ttl
; '14/03/01 s.kato

connect 'gatway.onicos.com:1022 /ssh /auth=publickey /user=katosa /keyfile="d:\user\kato_sa\admin\ssh\gatway_rsa" /ssh-L8080:terget.xxxx.co.jp:80'

wait '$'
sendln 'ssh terget'
settitle 'dev01-terget'

3.2 .ssh/config の例

この config は jump server (gateway) に置いておきます。
http、 https の2つのポートをフォワードしています。
TeraTerm で利用する場合、ローカルで2つのポートをフォワードする必要があります。
TeraTerm の ssh-L オプションを複数設定し jump server のローカルポートにフォワードします。

Host terget
        Hostname        terget.xxxx.co.jp
        ProxyCommand    ssh -W %h:%p gatway
        User            katosa
        IdentityFile    ~/.ssh/katosa_rsa
        ServerAliveInterval 20 #タイムアウトを防ぐためのアライバル。
        LocalForward    8080 127.0.0.1:80  #ターゲットサーバーの http(80) にローカルの 8080 をフォワード。
        LocalForward    8089 127.0.0.1:443 #ターゲットサーバーの https(443) にローカルの 8089 をフォワード。

3.3 sshだけで多段接続を実現する例


ssh_3_3_port_forwarding.puml

sshコマンドのオプションだけでもできますが、多段になると厳しいものがあります。
.ssh/config を利用すれば楽に定義できます。以下は .ssh/config の抜粋です。
抜粋後、動作確認していないので注意してください。
terget の http をブラウジングする場合は gatway2 にログインします。

sshでログイン
> ssh gateway2
.ssh/config の例
Host terget
        Hostname        123.223.232.114
        ProxyCommand    ssh -W %h:%p gatway2
        User            katosa
        IdentityFile    ~/.ssh/kato_rsa
Host gateway2
        Hostname        123.223.232.112
        ProxyCommand    ssh -W %h:%p gatway1
        User            on-katosa
        IdentityFile    ~/.ssh/kato_rsa
        LocalForward    8080 123.223.232.114:80
        ServerAliveInterval 20
Host gatway1
        Hostname        123.223.232.111
        User            katosa
        Port            12345
        IdentityFile    ~/.ssh/kato_rsa
        ServerAliveInterval 20

Appendix A. ローカルフォワードの方向 '15/09/14 追加

フォワードの方向が分かりずらいのと、ホストの指定のメモです。
ポートフォワードのオプションは TeraTerm のヘルプを見てもよくわからないので補足です。
ssh の -L オプションや .ssh/config の LocalForward のヘルプ(man)を見た方が確実です。
一行で複数記述する場合はカンマ(,)で区切り記述します。ポートがぶつからなければ複数のポートフォワードを記述できます。
ポートフォワードの記述は ssh コマンドの -L や .ssh/config の LocalForward と記述方法が同じです。

TeraTermのssh-Lオプション(マクロも同じ)

/ssh-L[<listen_addr>:]<port1>:<host>:<port2> [,...]

sshの -L オプション

-L  [<bind_address>:]<port1>:<host>:<hostport2>

.ssh/configファイルの LocalForward

LocalForward [<bind_address>/]<port1> and <host>/<hostport2>
ローカルフォワードのオプション
引数説明
listen_addr
bind_address
ローカルのリスンするマシンのアドレスを指定します。sshするマシンです。
デフォルトは localhost です。指定すると指定したアドレスがGWになります。
指定できるアドレスは ssh するマシンが持っているアドレスのみです。
port1 フォワードするためのポート、sshするマシン上。
1000未満のポートを利用する場合は管理者権限が必要です。
host リモート(ログイン先)でポートをリスンする先のアドレス。 デフォルトはlocalhost。ここにターゲットになるサーバのアドレスを指定する。
port2 リモートサーバ上でリスンするポート。

下記の場合はログインしているサーバ経由で www.graphk.co.jp に 80 でコネクトするセッションをローカルの 8080 に転送します。

/ssh-L8080:www.graphk.co.jp:80
TeraTermのヘルプ

Appendix B. フォワードの中継 '18/02/25 追加

文章だけですが、ポート転送の中継のメモ他です。備忘録です。追々きちんとメモします。