web-dev-qa-db-ja.com

SSHを使用して2つのホップをトンネリングし、最後のホップはリバースsshトンネルを介して接続されます

OpenSSHを使用して、2つのホップを介したポート転送を許可したいと思います。最後のホップは、リバーストンネルを介して接続されます。

これが私の現在の設定です:

  1. サーバーBはポート10000でsshdを実行しています。サーバーCはポート20000でsshdを実行しています。

  2. クライアントAは「通常の」SSH経由でサーバーBに接続します

  3. サーバーCは、ポート30000でサーバーBへの逆SSHトンネルを開きます。

  4. サーバーBは、そのリバーストンネルを介してサーバーCに接続します

私がしたいこと:クライアントAからサーバーBを介してサーバーCに接続を転送するクライアントAのポートを開きます(サーバーBとサーバーCの間に確立された逆SSHトンネルを介して)

現在使用しているそれぞれのコマンドは次のとおりです。

  1. クライアントAは「通常の」SSH経由でサーバーBに接続します。

     ClientAHostName $  ssh -p 10000 User@ServerBHostName
    
  2. サーバーCは、ポート30000でサーバーBへの逆SSHトンネルを開きます。

    ServerCHostName $  ssh -p 10000 -N -R 30000:localhost:20000 User@ServerBHostName
    
  3. サーバーBは、その逆トンネルを介してサーバーCに接続します。

    ServerBHostName $  ssh -p 30000 User@localhost
    

これを実行する理由は、サーバーC上の特定のサービスをクライアントAからWebブラウザーを介して(転送されたポートを使用して)制御できるようにするためです。クライアントAとサーバーCのISPによる制限により、サーバーB(またはクライアントA)からサーバーCに、またはサーバーCからクライアントAに直接接続することはできません。

1
user522490

簡単にするために、各サーバーにポート番号または範囲を割り当てるのが好きです。あなたが始めたことを維持して、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/
1
Law29