Ssh -Lと-Dの違いを理解しようとしています。 -DがSOCKSだけであることを除いて他に何かありますか?
ありがとう!
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サーバーから参照しているかのようです。
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は、リスニングポートがローカルでの使用のみにバインドされることを示し、空のアドレスまたは「*」は、ポートがすべてのインターフェースから利用可能であることを示します。