web-dev-qa-db-ja.com

ssh -Lと-Dの違い

Ssh -Lと-Dの違いを理解しようとしています。 -DがSOCKSだけであることを除いて他に何かありますか?

ありがとう!

55
Marvin

ssh -Lはローカルポートを開きます。そのポートに送信するものはすべてssh接続を介して送信され、サーバーを経由して送信されます。 ssh -L 4444:google.com:80などの場合、ブラウザでhttp://localhost:4444を開くと、実際にはGoogleのページが表示されます。

ssh -Dはローカルポートを開きますが、-Lのような特定のエンドポイントはありません。代わりに、SOCKSプロキシのふりをします。たとえばssh -D 7777を開いた場合、ブラウザにlocalhost:7777をSOCKSプロキシとして使用するように指示すると、ブラウザのリクエストはすべてsshトンネルを通過します。公共のインターネットでは、コンピューターからではなく、sshサーバーから参照しているかのようです。

57
Jessidhia

SSHでは、-Dは、ローカルの「動的」アプリケーションレベルのポート転送を指定します。

SSH -D [bind_address:]port

ローカルの「動的な」アプリケーションレベルのポート転送を指定します。これは、ローカル側のポートをリッスンするソケットを割り当てることで機能し、オプションで指定されたbind_addressにバインドされます。このポートへの接続が行われると、接続は安全なチャネルを介して転送され、アプリケーションプロトコルを使用して、リモートマシンから接続先を決定します。現在、SOCKS4およびSOCKS5プロトコルがサポートされており、sshはSOCKSサーバーとして機能します。 rootのみが特権ポートを転送できます。動的ポート転送は、構成ファイルで指定することもできます。

IPv6アドレスは、別の構文で指定できます:[bind_address /] port、またはアドレスを角括弧で囲みます。

スーパーユーザーのみが特権ポートを転送できます。デフォルトでは、ローカルポートはGatewayPorts設定に従ってバインドされます。ただし、明示的なbind_addressを使用して、接続を特定のアドレスにバインドできます。 「localhost」のbind_addressは、リスニングポートがローカルでの使用のみにバインドされることを示し、空のアドレスまたは「*」は、ポートがすべてのインターフェースから利用可能であることを示します。

さらに、ssh -Lローカル(クライアント)ホスト上の特定のポートを、リモート側の特定のホストとポートに転送することを指定します。

SSH -L [bind_address:]port:Host:hostport

ローカル(クライアント)ホスト上の特定のポートを、リモート側の特定のホストおよびポートに転送することを指定します。これは、ローカル側のポートをリッスンするソケットを割り当てることで機能し、オプションで指定されたbind_addressにバインドされます。このポートへの接続が行われるたびに、接続はセキュアチャネルを介して転送され、リモートマシンからホストポートhostportへの接続が行われます。ポート転送は、構成ファイルで指定することもできます。 IPv6アドレスは、別の構文で指定できます。[bind_address /] port/Host/hostport、またはアドレスを角括弧で囲みます。

スーパーユーザーのみが特権ポートを転送できます。デフォルトでは、ローカルポートはGatewayPorts設定に従ってバインドされます。ただし、明示的なbind_addressを使用して、接続を特定のアドレスにバインドできます。 「localhost」のbind_addressは、リスニングポートがローカルでの使用のみにバインドされることを示し、空のアドレスまたは「*」は、ポートがすべてのインターフェースから利用可能であることを示します。

6
Mughil