web-dev-qa-db-ja.com

単一ポートを使用する複数のリバースSSHトンネル

接続ごとにポートを使用して、単一サーバー上の複数のリモートシステムからのリバースSSH接続を受け入れることができます。

Remote A: ssh -fN -R5000:localhost:22 user@server-ip -p22
Remote B: ssh -fN -R5001:localhost:22 user@server-ip -p22
Remote C: ssh -fN -R5002:localhost:22 user@server-ip -p22

必要に応じて、ローカルクライアントからこれらのシステムにアクセスできます。

Access Remote A: ssh root@server-ip -p5000
Access Remote B: ssh root@server-ip -p5001

これには、サーバー上のリモートシステムごとに1つのポートを転送する必要があります。 100以上のリモートが接続する場合、サーバーファイアウォールで100以上のポートを開き、上記のように各リモートをポートに静的に割り当てる以外のオプションはありますか?私の目標は、複数のリモートがオンデマンドでトンネルを作成できるようにすることです。ここで、接続しているユーザーを照会できます。

Sslhは、プロトコルに基づいて単一のポート上のトラフィックを区別できるマルチプレクサであることがわかりましたが、これは異なるプロトコルにのみ適用されます。 ssl/ssh。 1つのポートで複数のトンネルを許可するソリューションはありますか?

例:

Remote A: ssh -fN -R5000:localhost:22 user@server-ip -p22 -identifier abc123
Remote B: ssh -fN -R5000:localhost:22 user@server-ip -p22 -identifier def456
access Remote A: ssh root@server-ip -p5000 -identifier abc123
access Remote B: ssh root@server-ip -p5000 -identifier def456
7
BCCode

私もあなたと同じ問題を抱えており、その時までに、1つの可能な答えにたどり着きました。アクティブなsshトンネルが1つだけ必要なので、私のシナリオはあなたのシナリオとは少し異なりますが、すべてのクライアントは必要に応じて接続する準備ができている必要があります。

クライアント/サーバーの単純なプロトコルを作成してすべてのクライアントを処理し、何らかのリストを作成できると思います。次に、ユーザーはクライアントの1つを選択して、逆方向トンネルを作成できます。これを行うには、sshサーバーではなく別のオープンポートが必要ですが、スレッドサーバーを使用すると、このセカンダリプロトコルの同じポートでさまざまなクライアントをlisten()できます。

私はまだ解決策に取り組んでいます(おそらく今書いたものを実装します)が、一度に接続するクライアントの最大数を決定し、その数のポートを構成する必要があります。私の場合は組み込みデバイス用の小さなLinux「サポート」にすぎないので、とにかく一度に1つのデバイスでしか作業できないので、必要なデバイスは1つだけです。

賢いアイデアは、どのサーバーポートでauxプロトコルを介してクライアントにリバーストンネルを接続するかを通知することです。

3
Filipe Nicoli