リモートマシンにアクセスしたいけれど、ファイアウォール等で直接ローカルマシンからアクセス出来ない場合があります。
この場合、リモートマシンにアクセス出来るSSHサーバを経由することで、ローカルマシンから間接的にリモートマシンにアクセスする方法があります。
SSHポートフォワーディングと呼ばれるものです。
SSHポートフォワーディングでは、下図のように、ローカルマシンの XX番ポートにアクセスすることで、SSHサーバを経由して、リモートマシンの YY 番ポートにアクセスします。
例えば、社内LANからしかアクセス出来ない社内WEBシステムがあるとします。
ここで、SSHポートフォワーディングによって、ローカルマシンの8888番ポートにアクセス(ブラウザで http://127.0.0.1:8888にアクセス)すると、SSHサーバを経由して、社内WEBシステムのWEB(80番ポート)にアクセスすることが出来るようになります。
このSSHポートフォワーディングが出来るには、
・ローカルマシンは SSHサーバに sshでアクセスできること
・SSHサーバはリモートマシンの YY番ポートにアクセス出来ること
が必要です。
まず、この2点が出来ることを確認しておいて下さい。
確認出来たら、SSHポートフォワーディンの為の設定です。
以降では、Windows上で PuTTY , PortForwarder を使う2通りの方法と、Linux上で sshコマンドを使う場合を説明します。
設定例として、「ローカルマシンの 1234番ポートにアクセスすることで、SSHサーバを経由して、リモートマシン www.yahoo.co.jp の 80番ポートにアクセスする」設定を説明します。
設定後、ブラウザで http://127.0.0.1:1234 にアクセスすると、SSHサーバを経由して、www.yahoo.co.jp の WEBポート(80番)にアクセスするので、yahooのページが表示されます。
PuTTY の場合
PuTTY のダウンロード・インストールについては、下記を参照して下さい。
ターミナルエミュレーター PuTTY(日本語版) パソコン鳥のブログ
PuTTY 起動後、接続先の指定で SSHサーバのホスト名またはIPアドレスを指定します。
以降でまだ設定があるので、ここでは「開く」ボタンを押さないいでください。
次に画面左側のツリーから、接続-SSH-トンネル を選択し、「源ポート」に ローカルマシンのポート、「送り先」に リモートマシンのアドレスとポートを設定し、「追加」ボタンを押します。
リモートマシンのアドレスとポートは、「アドレス:ポート番号」のように、「:」でアドレスとポート番号を区切って指定します。
アドレスは、ホスト名またはIPアドレスで指定します。
なお、「リモートマシンのアドレス」は、SSHサーバから見たアドレスです。
例えば、リモートマシンのアドレスに 127.0.0.1 を指定すると、それは SSHサーバ自身を示します。
ここでは、源ポートに「1234」、送り先に「www.yahoo.co.jp:80」とすると、以下のように、フォワードするポート一覧の箇所が「L1234 www.yahoo.co.jp:80」となります。
最後に「開く」ボタンを押して、SSHサーバに接続します。
ログイン画面になるので、ユーザ名とパスワードを入力すれば、SSHサーバにログインします。
これで、ローカルマシンの「源ポート」へのアクセスで、SSHサーバを経由して、リモートマシンにアクセスできます。
ウィンドウが開いたままになりますが、この状態でSSHポートフォワーディングが行われます。
ブラウザで http://127.0.0.1:1234 にアクセスすると、yahooのページが表示されます。
PortForwarder の場合
PuTTY を使用すると、SSHポートフォワーディングの際は PuTTY のコマンドウインドウが開いていることになります。
一方、PortForwarder はSSHポートフォワーディング機能を持つGUIの単体アプリで、タスクトレイへの格納も出来ます。
ダウンロードは以下から PortForwarder-2.9.0.zip をダウンロードします。
2015/10/18
最近の環境でビルドされたものがあります。次の記事を参照して下さい。
SSHポートフォワードGUIアプリ PortForwarder の最近のビルド版
ダウンロードしたファイルを解凍後、PortForwarder と同じ場所に設定ファイルを作成します。
テキストファイルで、以下の内容を作成します。
名称 の箇所は、後で PortForwarder の画面で表示されます。日本語名は文字化けするので使わない方がいいです。
config.txt
Host <I>名称</I> HostName <I>SSHサーバのアドレス</I> User <I>SSHサーバのユーザ名</I> LocalForward <I>ローカルマシンのポート リモートマシンのアドレス:リモートマシンのポート</I>
なお、「リモートマシンのアドレス」は、SSHサーバから見たアドレスです。
例えば、リモートマシンのアドレスに 127.0.0.1 を指定すると、それは SSHサーバ自身を示します。
ここでは、下記のように設定します。
HostName , User の箇所は、自分がアクセス出来る SSHサーバのホスト名とユーザ名を設定して下さい。
config.txt
Host ConnectToYahoo HostName xxxxx.dip.jp User test001 LocalForward 1234 www.yahoo.co.jp:80
ファイル作成後、PortForwarder を起動します。
先ほど作成した設定ファイルを、Config file: の箇所で指定します。
次にドロップダウに、設定ファイルの 名称 の箇所で記述した文字列が現れるので、選択し、「Connect」ボタンを押します。
初めて接続するSSHサーバの場合、次の画面が出るので、「はい」を押します。
次の画面も、初めて接続するSSHサーバの場合に表示されます。
「OK」を押します。
SSHサーバのパスワードを入力します。
Connected となったら、接続完了です。
これで、設定ファイルで指定した「ローカルマシンのポート」へのアクセスで、SSHサーバを経由して、リモートマシンにアクセスできます。
ブラウザで http://127.0.0.1:1234 にアクセスすると、yahooのページが表示されます。
この状態で、「Hide」ボタンを押すとタスクトレイに格納されますので、邪魔になることもありません。
なお、PortForwarder の最新バージョンは 2.9.0 (2007年10月20日) ですが、今年4月に問題となった OpenSSL の脆弱性 Heartbleed Bug には該当しません。
PortForwarder で使用されている OpenSSL 0.9.8 は、本脆弱性の対象外です。
Linuxの sshコマンド の場合
下記のように指定します。
ssh ユーザ名@SSHサーバのアドレス -L ローカルマシンのポート:リモートマシンのアドレス:リモートマシンのポート
「リモートマシンのアドレス」は、SSHサーバから見たアドレスです。
例えば、リモートマシンのアドレスに 127.0.0.1 を指定すると、それは SSHサーバ自身を示します。
ここでは、次のようにします。
user001@xxxxx.dip.jp の箇所は、自分がアクセス出来る SSHサーバのユーザ名とホスト名を設定して下さい。
ssh user001@xxxxx.dip.jp -L 1234:www.yahoo.co.jp:80
これで、「ローカルマシンのポート」へのアクセスで、SSHサーバを経由して、リモートマシンにアクセスできます。
ブラウザで http://127.0.0.1:1234 にアクセスすると、yahooのページが表示されます。
以上、SSHポートフォワーディングの設定方法です。
参考
ssh ポート転送
SSH ポートフォワーディング
Windows向けのSSHポートフォワード専用ソフトPortForwarder – 旅モバ
コメント