私は非常に特殊な状況に陥っています。これを行う方法は他にもありますが、これに夢中になり、次のように正確に行う方法を見つけたいと思います。
バックグラウンド
サーバーがいくつかのサービスを実行していて、分離されたDockerコンテナーに隠れているとします。これらのサービスのほとんどはhttpであるため、nginxプロキシを使用して各サービスに特定のサブドメインを公開しています。たとえば、ノードサーバーは、ポートがホスト上に80バインドさ127.0.0.1:8000れたDockerコンテナーで実行されています。私はそのプロキシすべての要求にnginxのでバーチャルホストを作成しますmyapp.mydomain.comしますhttp://127.0.0.1:8000。このようにして、を介して以外から外部からDockerコンテナーにアクセスすることはできませんmyapp.mydomain.com。
ここで、gogsコンテナーを指すような方法でgogs Dockerコンテナーを開始したいと思いgogs.mydomain.comます。ホストでバインドされたポートでこのgogsコンテナを開始します。そして、要求にプロキシnginxのサイトに、それがうまく機能し...8000127.0.0.1:8001gogs.mydomain.comhttp://127.0.0.1:8001
しかし、gogsはgitコンテナーなので、経由でリポジトリにアクセスしたいのgit@gogs.mydomain.com:org/repoですが、現在の設定では機能しません。その作業を行う1つの方法22は、コンテナーのポート0.0.0.0:8022をホストのポートにバインドすることですgit@gogs.mydomain.com:8022/repo。その場合、git ssh urlは次のようになります。
(それはうまくいかないようです。そのようなuriでオリジンにプッシュすると、git gitはgogs.mydomain.com-ではなく-のユーザーのパスワードを要求しますgogs.mydomain.com:8022が、それはおそらく私が間違っていることであり、この質問の範囲外です私もその診断をお願いします)
問題
私の主な懸念は、<gogs container>:22nginxを使用してhttpポートをプロキシするのと同じように、sshポートをプロキシ化することです。つまりgogs.mydomain.com、コンテナのポートに渡されるssh接続22。すでにホストでsshdが実行されているため、コンテナーのsshポートをホストのsshポートにバインドできません。また、これは、接続*.mydomain.comがコンテナのsshdに渡されることを意味します。
にssh接続したい:
mydomain.comhost.mydomain.comまたは受け入れられ、ホスト上のsshdに転送されるmydomainのIPアドレスgogs.mydomain.comまたはgit.mydomain.comgogsコンテナのsshdに渡されたものを受け入れる*.mydomain.com(*上記の可能性以外のものはどこですか)拒否されます
httpの場合、nginxを使用して簡単に機能させることができます。SSHでそれを行う方法はありますか?
(また、外に出て尋ねたいと思います:一般的にTCPサービスでそれを達成する方法はありますか?)
ここで私がやろうとしている方法についての洞察も歓迎します。私がやろうとしていることがまったくばかげていると言われてもかまわない。
私がすでに頭に浮かんだこと:
たぶん私はホスト上のsshdソケットをコンテナとしてroボリュームとして共有できますか?これは、コンテナ内のsshdがへのすべての接続を取得できることを意味し*.mydomain.comます。または以外のすべての接続をコンテナ内のsshdに拒否させる方法はありますgogs.mydomain.comかgit.mydomain.com?ただし、ホスト上のsshdは、*.mydomain.comとにかくすべての接続を取得しgogs.mydomain.comます。ですから対立が起こります わからないけど、実際に試したことはありません。必要があります私はそれを試してみてください?