OpenSSHを使用して、2つのホップを介したポート転送を許可したいと思います。最後のホップは、リバーストンネルを介して接続されます。
これが私の現在の設定です:
サーバーBはポート10000でsshdを実行しています。サーバーCはポート20000でsshdを実行しています。
クライアントAは「通常の」SSH経由でサーバーBに接続します
サーバーCは、ポート30000でサーバーBへの逆SSHトンネルを開きます。
サーバーBは、そのリバーストンネルを介してサーバーCに接続します
私がしたいこと:クライアントAからサーバーBを介してサーバーCに接続を転送するクライアントAのポートを開きます(サーバーBとサーバーCの間に確立された逆SSHトンネルを介して)
現在使用しているそれぞれのコマンドは次のとおりです。
クライアントAは「通常の」SSH経由でサーバーBに接続します。
ClientAHostName $ ssh -p 10000 User@ServerBHostName
サーバーCは、ポート30000でサーバーBへの逆SSHトンネルを開きます。
ServerCHostName $ ssh -p 10000 -N -R 30000:localhost:20000 User@ServerBHostName
サーバーBは、その逆トンネルを介してサーバーCに接続します。
ServerBHostName $ ssh -p 30000 User@localhost
これを実行する理由は、サーバーC上の特定のサービスをクライアントAからWebブラウザーを介して(転送されたポートを使用して)制御できるようにするためです。クライアントAとサーバーCのISPによる制限により、サーバーB(またはクライアントA)からサーバーCに、またはサーバーCからクライアントAに直接接続することはできません。
簡単にするために、各サーバーにポート番号または範囲を割り当てるのが好きです。あなたが始めたことを維持して、Bは10000、Cは20000です、30000を忘れてください。
セットアップ:
A$ ssh -p 10000 -N -L 20000:localhost:20000 UserB@B
C$ ssh -p 10000 -N -R 20000:localhost:20000 UserB@B
今、あなたはできるはずです
A$ ssh -p 20000 UserC@localhost
cでシェルを取得し、サーバーCポート8080で実行されているWebサーバーに接続する場合:
A$ ssh -p 20000 -N -L 8080:localhost:8080 UserC@localhost
に接続します:
http://localhost:8080/