* ポートフォワード [#o8834fde]
* ローカルポートフォワード [#o8834fde]

** RemoteHostAにログインする [#ace4d4cf]
 ssh -f -L 10022:RemoteHostA:22 RemoteHostA sleep 100000
 ssh -p 10022 -oHostAliasKey=RemoteHostA localhost
: -L XXX | ローカルホストのXXXポートを利用するように指定する。
: -f  |  ポートフォワードをバックエンドで待機させておくためのオプション
: sleep 1000000 | -f オプションを使う場合、なんらかのシェルコマンドを指定する必要がある。ループするシェルコマンドはまずいらしいので、長時間のsleepを指定するのが一般的なようだ。
:  HostAliasKey | これがないとローカルのSSHがリモートサーバのサーバーキーを確認する時に警告を表示して、処理が止まる。サーバーキーの確認をしないようにすることで回避する方法もあるようだ。

** RemoteHostAを経由し、RemoteHostBにログインする [#c6c2079f]
 ssh -f -N -L 10022:RemoteHostB:22 HostAUser@RemoteHostA
 ssh -l HostBUser -p 10022 -oHostKeyAlias=RemoteHostB localhost
: -N | リモートでシェルコマンドを実行しなくル。上のコマンド例でsleep 100000の記述を不要にできる。

** 設定ファイルを利用して省力化 [#i7e4bdf6]
上の「RemoteHostAを経由し、RemoteHostBにログインする」を省力化する。

$HOME/.ssh/configを以下のように編集する。
 Host tunnelToHostB
 HostName RemoteHostA
 User HostAuser
 Compression yes
 Port 22
 LocalForward 10022 RemoteHostB:22
 
 Host HostB
 HostName localhost
 user HostBuser
 Port 10022
 HostKeyAlias RmoteHostB

これを利用するには以下のようにコマンドを入力する。
 ssh -f -N tunnelToHostB (HostBまでのトンネルが掘られる)
 ssh HostB(HostBにSSH接続する)

さらに省力化するには以下のようなシェルスクリプトを書いておくとよい。
 #/bin/sh
 ssh -q -f -N tunnelToHostB
 ssh HostB

** 注意点 [#k68bbc17]
- リモートサーバ側のsshd_configを以下のようにする。
 AllowTcpForwarding yes
- リモートサーバ側のSSHDのアクセス制御で自サーバからの接続を許可する。tcp wrapperなら、hosts.allowを以下のようにする。
 sshd : 100.200.100.200 : allow
 (リモートサーバ側のIPアドレスを100.200.100.200とした場合)
 
** 参考 [#o55fc8dd]
- http://www.sb.soft.iwate-pu.ac.jp/~yushi/memo/ssh_port_forward.html
- http://cl.pocari.org/2005-01-24-2.html

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS