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

writen in utf-8 S.Kato ONICOS and Graph.K '12/02/24
Last Updated: sice 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.概要1.TeraTermマクロ2.sshコマンド3.ポートフォワード4.WinSCP 5. 目的別 sshクライアント設定

0. 概要

中継用ゲートウエイの先にあるWeb系開発マシンへの接続と http(80) のポートフォワードの設定実験のメモです。
確認した対象は Windows, Linux, Mac で、ssh の多段自動接続、ターゲットノード経由で外部へのブラウズなどです。
TeraTerm 、OpenSSH(sshコマンド) 、 WinSCP 含め、現場で利用するための情報をまとめてメモしています。
Linux や Mac は .ssh の config ファイルも併用です。('15/10/11)

急ぎの時にこのページ見てると混乱するので、目的別設定例として、このページをある程度整理してリンク張りました。リファレンス用です。また特権ポートを1000番と書いていましたので1025番以上と修正しました。
マクロが理解できる場合はこのページより分かりやすいだろうと思います。('17/05/07)

Tera Term のマクロと .ssh の config で ターゲットサーバ terget の http(80) をローカルの 8080 でブラウズできることを確認しました。
テストした接続パターンは以下。


 1. 単純なログインとログイン先の 80 をブラウズ
    +-------------------------+    +------------+
    |Browser(8080)->TeraTerm  | -> |GateWay (80)|
    | Windows                 |    |Linux       |
    +-------------------------+    +------------+
 2. ゲートウエイの先2段にログインしてターゲットの80をブラウズ
    +-------------------------+    +------------+    +-------------+    +-----------+
    |Browser(8080)->TeraTerm  | -> |GateWay     | -> |Terget Gatway| -> |Terget (80)|
    | Windows                 |    |Linux       |    |Linxu        |    |Linux      |
    +-------------------------+    +------------+    +-------------+    +-----------+
 3. ターゲットの https(443) をローカルの8443でブラウズ。(絶対アドレスで記載のサイトはこれでは不可)
    +-------------------------+    +------------+                       +-----------+
    |Browser(8443)->TeraTerm  | -> |GateWay     | --------------------> |Terget(443)|
    | Windows                 |    |Linux       |     Internet(443)     |Web site   |
    +-------------------------+    +------------+                       +-----------+
 4. ターゲットの https(443) をブラウズ。(Windows 側は管理者権限が必要)
    +------------+  +---------+    +------------+                       +-----------+
    |Browser(443)|->|TeraTerm | -> |GateWay     | --------------------> |Terget(443)| ('15/12/12追加)
    | Windows    |  |Windows  |    |Linux       |     Internet(443)     |Web site   |
    +------------+  +---------+    +------------+                       +-----------+
 5. WinSCP でターゲットサーバのファイルをブラウズ。
    +-------------------------+    +------------+                       +-----------+
    |WinSCP(22) --> TeraTerm  | -> |GateWay     | --------------------> |Terget( 22)|
    | Windows                 |    |Linux       |     Internet( 22)     |Linux      |
    +-------------------------+    +------------+                       +-----------+

ヒント: TeraTerm の ssh転送オプション は ssh のオプションにほぼ揃えてあるようです。

0.概要1.TeraTermマクロ2.sshコマンド3.ポートフォワード4.WinSCP5. 目的別 sshクライアント設定

1. TeraTerm のマクロと ssh の config ファイル

TeraTermの設定画面で各接続を定義しても良いのですが、いちいち保存する手間がかかります。
マクロを作成した方がマクロのコピーが簡単にでき、設定変更も簡単で、便利です。

1.1, 1.2, 1.3 は Tera Term 5.73でも動作します。
1.5 はリストから接続サーバを選択して接続するやり方です。これをメンテナンスした方が便利かもしれません。
1.5 は gatway.ssh/config で LocalForward の設定がされている前提です。.ssh/configは下に書いてあります。
keyfile や user は各自の環境に合わせてください。

拡張子 .ttl を ttpmacro.exe に関連ずけておいて、xxx.ttl のショートカットをどこかに張り付けておくと便利です。
ダイアログボックスを出して、keyfile や user を保存するようにしてもよいのですが、汎用性を追求すると長くなるので決め打ちで書いてあります。

ファイルなどの詳細はTeraTermのヘルプ を参照してください。

1.1 gatway に ssh 接続 - gatway.ttl

gatway.onicos.com にポート 1022 で ssh で接続するだけのシンプルなマクロです。
ログインは keyfile で rsa ファイルを指定しています。
このマクロは起動時オプションを connect マクロで設定しています。
TeraTerm のマクロに記述する内容はコマンドオプションとほぼ同じ記述です。
Tera Term 5.73でも動作します。

; 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. ステップサーバ経由でターゲットへの接続 - gatway_tergetdev.ttl

localPC(8080) -> gateway -> dev01-terget(80) への決め打ち接続

8080 を Tera Term を起動している PC(Windows) から Gatway にポートフォワードします。
このマクロはTera Term 5.73でも動作します。
gatway のサーバの .ssh/config で dev01-terget に LocalForword の設定があるのが前提です。
Tera Term の ssh-L オプションでポートフォワードを指定します。
ローカルPC の 8080 がターゲットの 80 番にフォワードされます。
ブラウザで確認する時の url は http://localhost:8080 です。

; 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:localhost:80'

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

1.3 ターゲットを経由して外部にアクセス

localPC(8080) -> gateway -> xyz.zzz.co.jp(443) へアクセス

以下はターゲットを経由して外部の Webサーバ に接続する設定です。フォワードの設定で対象になるサーバを指定します。
注意:このマクロは実行テストしていません。->類似のマクロは動作しました。


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

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

1.4 フォワードの方向とオプション '15/09/14 追加

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

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

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

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

1.5 リストから接続するサーバを選択 - terget_gatway.ttl

これはちょっと長くなりました。(2015/10/11更新しました。)
リストマクロ (ListBox) は Tera Term 4.80 以降でないと動作しないようです。
TeraTermがドキュメントどおりではない動作をするようなしないような、、。
.ssh/configでdev01-tergetにLocalForwordの設定があるのが前提です。

; target_gatway.ttl for Tera Term 5.95
; '15/09/14 s.kato
;-----------------------------------------------------
; host1     : 最初のゲートウエイ
; arguments : 引数の設定用
; command   : ターゲットで実行するコマンド
;-----------------------------------------------------
host1 =' gatway.onicos.com:10022'; 
host1_user =' /user=katosa'
host1_mod =' /ssh /auth=publickey'
host1_keyfile =' /keyfile="d:\user\kato_sa\admin\ssh\gatway_rsa"'

;-----------------------------------------------------
; コマンドの組み立て
;-----------------------------------------------------
arguments = host1
strconcat arguments host1_user
strconcat arguments host1_mod
strconcat arguments host1_keyfile

password2 = ' /password='
;-----------------------------------------------------
; サーバリストのためのノードアドレス
;-----------------------------------------------------
strdim server 10		;リスト10個まで
server[0] = '25'		;.ssh/config に指定されているサーバ名
server[1] = '12'		;
server[2] = 'gateway'	;ゲートウエイにするサーバ

;-----------------------------------------------------
;それぞれのサーバのパスワード
;-----------------------------------------------------
strdim pwd 10			;リスト10個まで
pwd[0] = 'kokodayo'		;
pwd[1] = 'asokodayo'	;
;-----------------------------------------------------
; サーバリスト表示
;-----------------------------------------------------
listbox 'サーバを選択してください' 'サーバリスト' server

; オプションのセット
if result >= 0 then
	host2 = server[result]	;ゲートウエイのサーバを指定
	password2 = pwd[result]	;ゲートウエイのサーバのパスワード

	;複数のポートを転送する指定。ドキュメントではカンマ(,)で区切るとあるがスペースでも大丈夫。
	if result = 2 then
		strconcat arguments ' /ssh-L8080:www.graphk.co.jp:80'
		strconcat arguments ' /ssh-L8443:xyz.zzz.co.jp:443'	;ブラウズしたいサーバ
	endif
else
	end
endif

if result >= 2 then
	host2 = ''
endif

;-----------------------------------------------------
; 最初のサーバへの接続
;-----------------------------------------------------
connect arguments

;-----------------------------------------------------
; 2つめのサーバへの接続の確認 '14/04/11
;-----------------------------------------------------
strcompare host2 ''
if result = 0 end

;-----------------------------------------------------
; 2つめのサーバへの接続
;-----------------------------------------------------
wait '$'

command = 'ssh '
strconcat command host2
sendln command

strcompare password2 ''
if result != 0 then		;パスワード入力
	wait 'password:'
	sendln password2
endif
end	;ここまでで良い場合はここに end

以下はサーバに設定されている文字コードで Tera Term の環境を変更する手段です。
接続後 echo $LANG で文字コードの設定を取得しています。
未確認です。ヘルプ確認しておきます。(TTX Kanji Menuが必要らしいです)

sendln 'echo $LANG'
wait 'ja_JP.UTF-8' 'ja_JP.eucJP' 'ja_JP.SJIS'
if result = 1 then 
    ; UTF8 
    callmenu 54013  ; [KanjiCode] Recv: UTF-8 
    callmenu 54113  ; [KanjiCode] Send: UTF-8 
elseif result = 2 then 
    ; EUC 
    callmenu 54011  ; [KanjiCode] Recv: EUC-JP 
    callmenu 54111  ; [KanjiCode] Send: EUC-JP 
elseif result = 3 then 
    ; SJIS 
    callmenu 54010  ; [KanjiCode] Recv: Shift_JIS 
    callmenu 54110  ; [KanjiCode] Send: Shift_JIS 
endif

settitle host2	;プロンプトが返るとリセットされる場合があります。
end
0.概要1.TeraTermマクロ2.sshコマンド3.ポートフォワード4.WinSCP5. 目的別 sshクライアント設定

2. ssh コマンド

2.1 ssh でログインするための準備

Linux サーバに ssh で接続するためには、sshd が設定されていて、ssh で利用するポートを開放しておく必要があります。
sshd がインストールされていない場合はインストールする必要があります。 CentOS の場合は yum install sshd でインストールできます。 他のディストリビューションでは aptget など、それぞれのディストリビューションに合ったやり方でインストールしてください。

また、サーバ側の各ユーザのホームディレクトリには .ssh というディレクトリが必要です。 そのディレクトリの直下に config というファイルを用意して、利用するユーザ以外がアクセスできないように chmod コマンドでパーミッションを設定する必要があります。

注意:なんども接続テストしているとノードの id を誤認して ssh 接続ができなくなることがあります。その場合は known_hosts をいったん削除してください。

2.2 .ssh/config の例 (~/ssh_config/terget_config)

作業環境毎に config を terget_config のような名前で用意しておき、 .ssh/config にコピーすることにしました。
コメントは#からの行のはずですが、調べてないので config ファイル中のコメントは控えました。
コメントは行の先頭に # でした。('14/03/22)

2.3 Tera Term 経由でターゲットへログインする時の、ゲートウエイに置いておく .ssh/config の例

Host dev01-terget
        ProxyCommand    ssh -W %h:%p terget_gatway
        User            katosa
        IdentityFile    ~/.ssh/terget_rsa
#			ターゲットサーバーの http(80) にローカルの 8080 をフォワード。
        LocalForward    8080 127.0.0.1:80
#			ターゲットサーバーの https(443) にローカルの 8089 をフォワード。
        LocalForward    8089 127.0.0.1:443
#			タイムアウトを防ぐためのアライバル。
        ServerAliveInterval 15
Host batch01-terget
        ProxyCommand    ssh -W %h:%p terget_gatway
        User            katosa
        IdentityFile    ~/.ssh/terget_rsa
Host web01-terget
        ProxyCommand    ssh -W %h:%p terget_gatway
        User            katosa
        IdentityFile    ~/.ssh/terget_rsa
Host web02-terget
        ProxyCommand    ssh -W %h:%p terget_gatway
        User            katosa
        IdentityFile    ~/.ssh/terget_rsa
Host batch01-terget
        ProxyCommand    ssh -W %h:%p terget_gatway
        User            katosa
        IdentityFile    ~/.ssh/terget_rsa

Host terget_gatway
        Hostname        123.213.323.423
        User            katosa
        IdentityFile    ~/.ssh/terget_rsa

ポートフォワードはローカルからターゲット(リモート)の向きで LocalForward を使います。送り元が左です。
アライバル確認しているサーバでは操作していないとタイムアウトでセッションが切れるので ServerAliveInterval を設定します。
123.213.323.423 はターゲットのグローバルIPアドレスに書き換えてください。

2.4 Mac や Linux からゲートウエイ経由でログインする時のクライアントに置いておく .ssh/config ファイルの例

Host dev01-terget
        ProxyCommand    ssh -W %h:%p terget_gatway
        User            katosa
        IdentityFile    ~/.ssh/terget_rsa
        LocalForward    8080 127.0.0.1:80
Host batch01-terget
        ProxyCommand    ssh -W %h:%p terget_gatway
        User            katosa
        IdentityFile    ~/.ssh/terget_rsa
Host web01-terget
        ProxyCommand    ssh -W %h:%p terget_gatway
        User            katosa
        IdentityFile    ~/.ssh/terget_rsa
Host web02-terget
        ProxyCommand    ssh -W %h:%p terget_gatway
        User            katosa
        IdentityFile    ~/.ssh/terget_rsa
Host batch01-terget
        ProxyCommand    ssh -W %h:%p terget_gatway
        User            katosa
        IdentityFile    ~/.ssh/terget_rsa

Host terget_gatway
        Hostname        123.213.323.423
        ProxyCommand    ssh -W %h:%p gateway
        User            on-katosa
        IdentityFile    ~/.ssh/terget_gatway_rsa

Host smtp
        Hostname        192.168.xxx.xxx
        ProxyCommand    ssh -W %h:%p graphk
        User            katosa
        LocalForward    2025 127.0.0.1:25

Host graphk
        Hostname        graphk.co.jp
        User            katosa
        Port            2022

Host gateway
        Hostname        gateway.onicos.com
        User            katosa
        Port            1022
        IdentityFile    ~/.ssh/raimi_rsa
        LocalForward    8080 127.0.0.1:8080

123.213.323.423 はターゲットのグローバルIPアドレスに書き換えてください。
127.0.0.1 はローカルホストのアドレスです。hosts に定義が書いてあれば localhost と指定しても大丈夫です。
 Windows : %system%System32\Driver\etc\hosts
 Linux, Cygwin, FreeBSD系: /etc/hosts
Port 指定は、ssh のポートです。デフォルトは 22 です。それぞれの環境に合わせて変更してください。

0.概要1.TeraTermマクロ2.sshコマンド3.ポートフォワード4.WinSCP5. 目的別 sshクライアント設定

3. sshコマンドや Tera Term の設定でポートフォワードする手順

3.1 概要

configファイルが設定されている前提で target にログインし、http (80番) を転送するための操作です。 動作としてはsshの-Lオプションで80番ポートに gatway の8080ポートをフォワードします。
gatway の8080番は Tera Term のssh転送を使ってローカルの pc(TeraTermが動作しているWindows) の 8080 からフォワードします。

パケットは Windows -> gatway -> terget_gatway -> terget の方向です。

注意:sshコマンドを実行するマシンで設定するポート番号は1025番より上のポートでない場合はroot権限が必要です。

3.2 手順

以下の手順はTera Term 4.73での確認です。 4.73以降でないとsshポートフォワードの機能が無いかもしれません。

3.3 TeraTerm で gatway にログイン

gatwayにログインします。その状態で gatway の 8080ポートをローカルのPC(Tera Term)の 8080 に転送する設定をします。
Tera Term がポートフォワードしているので、作業中は Tera Term を停止してはいけません。

「メニュー」の「設定」→SSHポート転送
 追加
    [ローカルのポート] チェック その後ろに 8080 を設定
   リモート側ホスト (ホスト名はブランク) ポート(P) 8080

2015/12/12追加
テストデバイスから TeraTerm -> ゲートウエイ経由で 目的のサイト をブラウズしてローカルの環境(LAN)で接続して利用する場合は「リスン」を設定します。

+-----+    +--------+    +-------+    +--------------+
|other| -> |TeraTerm| -> |gateway| -> |terget        |
|     |    |Windows |    |       |    |ssh.197.xy.xyz|
+-----+    +--------+    +-------+    +--------------+

上記の設定をマクロやコマンドオプションで指定する場合は以下のような記述になります。

/ssh-L192.168.1.1xx:443:ssh197.xy.xyz:443

Redmine や フレームワークを利用して絶対パスで構築されたサイトの場合、http(80) や https(443) はそのままの指定で利用できるようにする必要があります。その場合は TeraTerm を管理者権限で起動する必要があります。
TeraTerm を起動している Windows の中でブラウズ、する場合は %System%system32/driver/etc/hosts を書き換えます。
TeraTerm を起動している Windows 意外のデバイスから利用する場合、host ファイルを書き換えてください。

スマートフォン 系の場合は Linux や Mac でポートフォワードし dnsmasq を利用した方が便利です。

3.4 sshコマンドでターゲットへログイン

gatway で以下のコマンドを実行し terget にログインします

[katosa@raimi ~]$ ssh -L 8080:127.0.0.1:80 terget
Last login: Fri Feb 28 19:46:55 2014 from ip_192_168_xxx_xxx.hk.internal

この構文は以下です


 ssh -L <ローカルのポート>:127.0.0.1:<ターゲットのポート> <ターゲットホスト>

注意:sshコマンドを実行するマシンで受けるポートは1025番より上のポートでない場合はroot権限が必要です。

3.5 ブラウジング

以下のurlでターゲットの80番をブラウズ

http://localhost:8080/

3.6 注意事項

3.6.1 ポートの指定

 検索した幾つかのサイトのsshの情報はターゲットのポートと受けるローカルのポートのアドレスの記述が逆になっていました。エラーになるので、おかしいと思い結局はman sshを観ました。

3.6.2 タイムアウト

 terget のsshdはタイムアウトが設定されています。この手順ではブラウザを操作している間にタイムアウトするかもしれません。-nオプションを付けると避けられるかもしれませんが、未確認です。
マナーの問題もありますが、アライバル確認しているサーバでは ServerAliveInterval を設定するとタイムアウトしないことがわかりました。('14/03/22)

0.概要1.TeraTermマクロ2.sshコマンド3.ポートフォワード4.WinSCP5. 目的別 sshクライアント設定

3.6.3 確認した環境

 確認した環境は自宅なので以下のような接続になります。

graphk.co.jp -> gateway.onicos.co.jp -> terget_gatway -> terget

4. WinSCPで多段サーバ経由接続

WinSCP は ssh を利用してリモートのファイルを操作できます。
WinSCP のサーバの設定はターゲットのアドレスを設定します。
ssh を利用して遠隔地の NAT の中のサーバを利用する場合はサイトを選び、「設定」から「接続」の「トンネル」でゲートウエイにするサーバを指定します。
多段に接続したい場合はゲートウエイにするサーバの .ssh/config を編集することで実現できます。

「設定」をクリックし、「高度なサイトの設定」で「トンネルするホストの設定」を設定します。