ローカルポート転送
ローカルポート転送を使用して、Secure Shell クライアントと同じコンピュータ上で実行されているアプリケーションクライアントからデータを安全に転送できます。ローカルポート転送を構成する時は、データの転送に使用する任意のローカルポート、およびデータを受信する着信先ホストとポートを指定します。ローカルポート転送は次のように動作します。
-
Secure Shell 接続が確立されると、Secure Shell クライアントは、指定のローカルポートを使用して、ローカルコンピュータ (Secure Shell クライアントを実行しているコンピュータ) 上のリスニングソケットを開きます。ほとんどの場合、Secure Shell クライアントホストを実行しているアプリケーションのみがこのソケットを使用できます。
ゲートウェイポート設定は、ローカルに転送されるポートをリモートアプリケーションが使用できるかどうかを制御します。既定ではこの設定は無効で、クライアントは、ローカルポート転送のためにソケットを開いた時に、ループバックアドレス (「localhost」または 127.0.0.1) を使用します。これにより、他のコンピュータで実行中のアプリケーションは、転送されるポートに接続できなくなります。ゲートウェイポートを有効にすると、リモートアプリケーションクライアントは、Secure Shell クライアントの Ethernet アドレス (IP アドレス、URL、DNS 名など) を使用してソケットを開くことができます。例えば、acme.com で実行中の Secure Shell クライアントがポート 8088 を転送するよう構成されているとします。ゲートウェイポートが無効な場合、転送されるソケットは localhost:8088 です。ゲートウェイポートが有効な場合、転送されるソケットは acme.com:8088 です。
注意
認証無しにお使いのシステムでリモートアプリケーションが転送ポートを使用する許可を与えるため、ゲートウェイポートを有効化すると、使用しているクライアントホスト、ネットワーク、接続のセキュリティの低下を招きます。
-
アプリケーションクライアントは、(アプリケーションサーバホストおよびポートに直接接続するのでなく) 転送ポートに接続するように構成されます。そのクライアントが接続を確立すると、すべてのデータがリスニングポートに送信され、Secure Shell クライアントにリダイレクトされます。
-
Secure Shell クライアントはデータを暗号化し、Secure Shell チャネルを通じて Secure Shell サーバに安全にデータを送信します。
-
Secure Shell サーバはデータを受信して解読し、アプリケーションサーバによって使用される送信先ホストおよびポートにリダイレクトします。
メモ
最終目標のホストとポートがSecure Shellサーバホストにない場合、データはプレーンテキストでSecure Shellホストとアプリケーションサーバホスト間によって送信されます。
-
アプリケーションサーバからの戻りデータは Secure Shell サーバに送られ、Secure Shell サーバは戻りデータを暗号化し、SSH トンネルを通じて Secure Shell クライアントに安全に送信します。Secure Shell クライアントはデータを解読し、元のアプリケーションクライアントにデータをリダイレクトします。
ローカルポート転送の一般的なコマンドライン構文は以下のとおりです。
ssh -L listening_port:app_host:hostport user@sshserver
以下に示す図は、ローカルポート転送の 2 とおりの使用法を示しています。
上記の構成では、アプリケーションクライアントと Secure Shell クライアントの両方がホスト A で実行されます。Secure Shell サーバとアプリケーションサーバの両方はホスト B で実行されます。ホスト A のポート 2222 へ送信されたすべてのデータはホスト B のポート 222 へ転送されます。この配置では、通過中のすべてのデータが安全に暗号化されます。これは、以下のコマンド (localhost はホスト B のループバックアドレスを識別します) によって構成します。
ssh -L 2222:localhost:222 user@HostB
以下の図は、3 番目のホストへのローカルポート転送を示しています。この構成では、アプリケーションサーバが、Secure Shell サーバとは異なるホストで実行されます。ホスト A のポート 2222 へ送信されたすべてのデータはホスト C のポート 222 へ転送されます。
これを構成するコマンドは次のとおりです。
ssh -L 2222:HostC:222 user@HostB
メモ
ホストBとホストC間で送信されるデータは暗号化されません。