SSHポートフォワーディングを理解しようとしていますが、さまざまな質問やチュートリアルを見て成功していません。私が見たものはすべて私の状況とは少し異なっているようで、それを適用する方法を完全に理解することはできません。私の。
内部ネットワーク(22.22.22.xx)のWindowsマシンからアプリケーション(A)を実行しています。このアプリケーションは、このネットワークでホストされている必要があります。また、(22.22.22.xx)ネットワーク用のネットワークアダプターカードと(11.11.11.xx)ネットワーク用のネットワークアダプターカードを備えたマシンにLinux SSHクライアント/サーバー(S)があります。 SSHクライアントにアクセスできるが(22.22.22.xx)ネットワークにアクセスできないWindowsで実行されているアプリケーションクライアント(C)があるため、Aに直接アクセスできません。設定を以下に示します。
アプリケーションクライアントがアプリケーションサーバーに到達できるように、SSHサーバーからのポート転送を設定しようとしています。
これまでのところ、アプリケーションクライアントでPuTTYを使用してローカルポートフォワーディングを機能させることができました。私はこのコマンドを使用しました(PuTTYのUIで入力):
ssh -L 8888:22.22.22.5:5555 [email protected]
ここから、「C」でlocalhost:8888に移動し、「S」をトンネリングして、「A」で提供されているページに到達できます。ただし、完璧な世界では、ページにアクセスするたびにクライアントでPuTTYを開いて実行する必要はありません。
そこで、「S」から「A」にポート(たとえば4444)を転送するようにリモートポート転送を設定する方法を見つけようとしています。そのため、「C」から11.11.11.4:4444に移動すると、22.22.22.5:5555にトンネリングされます。
これまで、「S」のコマンドラインでこれを実行してみました。
ssh -R 4444:22.22.22.5:5555 user@localhost -o GatewayPorts=yes
これを実行したとき、マシンに直接SSH接続したように見えました。資格情報を入力し、クライアントから11.11.11.4:4444にアクセスしようとしましたが、サーバーに転送されませんでした。また、「A」でこのコマンドを実行してみました(ただし、PuTTYから)。
ssh -R 4444:localhost:5555 [email protected] -o GatewayPorts=yes
これにより、PuTTYイベントログに「リモートポート転送に失敗しました」というメッセージが表示されました。
私は解決策に非常に近づいていて、コマンドで何かが混乱しているように感じます。または、私は遠く離れていて、何が起こっているのかまったく理解していません。
ローカルバージョン(最初の例)では、サーバーでの構成が必要な場合を除いて、ほとんど違いはありませんが、リモート/リバース転送は必要ありません。オプション GatewayPorts=yes
はsshサーバー用であり、sshクライアント用ではありません。
サーバーSで試してください
ssh -g -L 4444:22.22.22.5:5555 user@localhost