Lightly and Leniently

読者参加型

5連単をねらえ♪
ぷちBBS
ぷちアンケート
掲示板

情報系

ぷちWiki
2ちゃんねるの巣湖
ウイニングポスト6
ぷち日記
管理人のおすすめ

ぷちツール

パスワードジェネレータ
ルビ振り
アクセス情報表示
天気予報
駅データ
Graphviz CGI
CPAN最速検索
スイーツ検索 by 楽天
Amazon で商品検索

その他

igoogleバージョン
辺境の対戦ページ
@三国志派示板ログ
( ̄□ ̄;)!!掲示板ログ

[Valid RSS]

ぷちWiki - OpenSSHのポートフォワード

[ OpenSSH ]

OpenSSHのポートフォワード

OpenSSH では、ポートレベルでのフォワードが可能で、当然通信は暗号化されますので、非常に便利です。
ポートフォワードは以下の2つのパターンが可能です。

  • ローカルマシンの指定したポートへの接続をログイン先のマシン経由で、指定したマシンの指定したポートへのポートフォワード (-L port:host:host_port))
  • ログイン先のマシンの指定したポートへの接続をローカルマシン経由で、指定したマシンの指定したポートへのポートフォワード (-R port:host:host_port))

例えば、ローカルマシン上のポート 10080 番への通信を web_server マシンのポート 80 番へポートフォワードする場合は以下のようなコマンドを実行します。
つまり、http://localhost:10080/ を参照することにより http://web_server/ を参照可能にします。
ただし、gw へは ssh でログインでき、gw からは web_server:80 が参照可能であるものとします。

ssh -L 10080:web_server:80 koumei2@gw 

バックグラウンドでポートフォワードする

上記では、ちゃんとポートフォワードされるもののログインシェルが動いてしまって、無駄なウィンドウを開いておくことになってしまいます。
その上、そのままログインしっぱなしにしておかなくてはならないので、ちょっと気持ち悪い。
ということで、バックグラウンドでポートフォワードをする方法です。

ssh -L 10080:web_server:80 -f koumei2@gw ping -i 60 localhost > /dev/null 

-f 指定をすると、指定したコマンドをバックグラウンドで実行して、リモート先のシェルからすぐに制御が戻ってきます。
従って、ログインし続けている必要はありません。
ここで注意しないといけないのは、実行するコマンドが終わってしまうとポートフォワードも終了してしまうということです。
上の例では、ping -i 60 localhostとして、永久ループさせています。
その出力を /dev/null に流しているのは、どうも ssh を実行したウィンドウを閉じてしまうと、出力がエラーになってしまうらしくて、ポートフォワードも終わってしまうからです。
ちなみに、出力なんかさせなきゃいいじゃんってことでsleep 60とかにすると、IP マスカレードな環境越しの場合には30分もあればポートフォワードの接続が切断されるでしょう。
これは、ある一定時間パケットが全く飛ばなかった時には、IP マスカレードのマップテーブルから消されてしまうからです。
そういう意味では、IP マスカレードではない人は sleep の方がいいかもしれません。

リモート接続もフォワードする

ポートフォワードは、デフォルトではそのサーバ内からの通信のみをポートフォワードします。
つまり上の例でローカルのサーバを mymachine だとすると、http://mymachine:10080/ をローカルのサーバから参照した場合には、ちゃんと http://web_server/ を参照できますが、他のマシンから http://mymachine:10080/ を参照しても接続を拒否されます。
これを可能にするには、-g オプションを指定します。

ssh -L 10080:web_server:80 -g -f koumei2@gw ping -i 60 localhost > /dev/null 

これで mymachine:10080 を参照できるマシンからであれば、http://web_server/ を参照することが可能になります。
ただし、これを行うと、意図しない人が参照できてしまうといことが起こりうるので注意が必要です。

最終更新日時:2007/09/12


ご意見ご質問等は掲示板にて受け付けています。