私は非常に特殊な状況に陥っています。これを行う方法は他にもありますが、これに夢中になり、次のように正確に行う方法を見つけたいと思います。
バックグラウンド
サーバーがいくつかのサービスを実行していて、分離された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のサイトに、それがうまく機能し...8000
127.0.0.1:8001
gogs.mydomain.com
http://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>:22
nginxを使用してhttpポートをプロキシするのと同じように、sshポートをプロキシ化することです。つまりgogs.mydomain.com
、コンテナのポートに渡されるssh接続22
。すでにホストでsshdが実行されているため、コンテナーのsshポートをホストのsshポートにバインドできません。また、これは、接続*.mydomain.com
がコンテナのsshdに渡されることを意味します。
にssh接続したい:
mydomain.com
host.mydomain.com
または受け入れられ、ホスト上のsshdに転送されるmydomainのIPアドレスgogs.mydomain.com
またはgit.mydomain.com
gogsコンテナの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
ます。ですから対立が起こります わからないけど、実際に試したことはありません。必要があります私はそれを試してみてください?