2つの機能の違いは何ですか?私は少し混乱しています。
ローカル転送により、リモートポートがローカルで使用可能になります。
リモート転送により、ローカルポートがリモートで利用可能になります。
しかし、この「アベイラビリティ」は両方向で機能します...またはそれはできますか?
例えば。以下(ホスト「ホーム」から発行)
ssh -R 1234:localhost:2345 user@work
これにより、work :: 1234とhome :: 2345の間に安全なトンネルが確立されます。
片側に何かを入れると、反対側に出てきます。
しかし、その後、ホストの「work」からの次の呼び出しによって同じことを達成できます。
ssh -L 1234:localhost:2345 user@home
それで、唯一の違いは私がそれをどこから呼ぶかです、そうですか?
主な実用的な違いは、2台のコンピューターAとBを接続し、Bがファイアウォールの背後にある場合、またはNAT制御できないルーターであり、着信をブロックしている場合です。 AでAをBに接続することはできません。ただし、Bは発信をブロックしません。したがって、BをAに接続します。
-説明を追加-
質問者が理解した上記のことは、ローカル転送とリモート転送の主な実用的な違いを意味します。 ssh -Lとssh -Rは、それぞれを使用する場合に使用します。彼が与えた特定のコマンド例、-Lと-Rを切り替える場所、およびどのsshdサーバーに接続するかについてはコメントしていませんでした。しかし、今、私はそれにコメントしようと試みます。彼が与えたsshコマンドでは、通常のクライアントと通常のサーバーの観点からは、「これはsshクライアントであり、これはsshサーバーです。 "それはsshを知りません、そしてsshのクライアント/サーバーの側面は通常のクライアントと通常のサーバーにとっても無関係で未知です。彼らはただ聞いている人を気にしているだけであり、彼らの観点からは、それは同じに見えます。仕事用のコンピューターは1234でリッスンします。一方のケースではsshd.exe sshサーバーであり、もう一方のケースではssh.exe、sshクライアントであることに気付きません。ちなみに、sshクライアントがある場所はローカルと見なされます。
はい、正しく理解できれば、aからbへのローカルポート転送は、bからaへのリモートポート転送(およびその逆)と同じになるはずです。 aからbへの(aから見た)発信トンネルは、aからb(bから見た)への着信トンネルと等しいはずです。
ローカルポートフォワーディング送信トンネルを作成します。これを使用して、公共のインターネットコンピューターをローカルマシンに接続できます。ローカル(クライアント)ホスト上の特定のポートがリモート側の特定のホストとポートに転送されるため、ローカルユーザーはローカルホスト上のリモートホスト:ポートの組み合わせにアクセスできます。
ssh -L local_port:remote_Host:remote_port user@hostname
リモートポート転送は、ローカルコンピュータをパブリックインターネットに接続するために使用できる受信トンネルを作成します。インターネットユーザーは、リモートホスト上の特定のローカルホスト:ポートの組み合わせにアクセスできます。リモート(サーバー)ホスト上の特定のポートは、ローカル側の特定のホストとポートに転送されます。
ssh -R local_port:remote_Host:remote_port user@hostname
ローカルポート転送を使用して、ユーザー(クライアント)がコンピューターのリスニングソケットを開き、アプリケーションレベルのプロトコルクライアントをこのソケットに接続します。これで、接続はSSH経由でサーバーに転送されます。サーバーはリモートホストに接続し、プロトコルクライアントから最終的な宛先にデータをトンネルします。
リモートポート転送を使用すると、サーバーはサーバーホスト上で待機ソケットを開きます。一部のリモートアプリケーションはこのホストに接続し、クライアントコンピューターに転送される情報を送信します。ここでは、最終的な宛先(コンピューターまたはネットワーク上で実行されているいくつかのアプリケーションレベルのプロトコルサーバー)への接続が確立され、データがリモートアプリケーションから最終的な宛先に転送されます。
これは小さな例で最もよく理解されます。これらの例では、接続は次のように構成されています。
ローカルサーバーLAN)-ターミナル-----(SSH、通常はインターネット経由)-----トンネルエンドポイント-(LAN)-リモートマシン
Sshアクセス権のあるトンネルエンドポイントから到達可能な特定のリモートマシン/ポートにトンネリングする場合は、ローカルポート転送を使用します。 Therby、そのリモートマシンのポートは、自分の端末(http:// localhost:terminal_port /など)からローカルにアクセスすることもできます。
これは、次の構文を使用して行われます。
ssh -L terminal_port:remote_machine_ip:remote_service_port -p tunnel_endpoint_ssh_port ssh-login@tunnel_endpoint_ip
---(ANYONE(!) remoteを有効にする場合は、リモートポートフォワーディングを使用できます。これにより、トンネルエンドポイントのリスニングポートに到達して、ローカルLANのip/portにリモートアクセスできます。ローカルサーバーへのリモートマシンからの接続は、ターミナルによって開始されたようです。
構文は次のとおりです。
ssh -R tunnel_endpoint_listen_port:local_server_ip:local_server_port -p tunnel_endpoint_ssh_port ssh-login@tunnel_endpoint_ip
Socatのマンページはこれを非常によく説明しています。はい、sshとsocatは2つのまったく異なるものであることは知っていますが、socatのドキュメントは非常に優れています。