2016-11-04 1 views
3

DockerエンジンがインストールされたUbuntu 16.04を実行しているサーバーがあります。要求されたドメインに基づいてGitLab DockerコンテナにSSHを転送する方法

私はGitLabサービス(もちろん他のものと一緒に他の多くのコンテナ)を実行しています。ドッカーのネットワークアドレスGITLAB_IPとしましょう。

VIRTUAL_HOST環境変数に基づいて、外部からのHTTP要求をプロキシするのにnginx-proxyを使用しています。

*.mydomain.comを対象とするすべてがmydomain.comになり、同じホストで解決されるように、DNSが設定されています。

gitlab.mydomain.comへのリクエストは私のGitLabコンテナによって提供されていますが、mydomain.comに行くリクエストはメインのnginxコンテナによって提供されます。

すべてはポート80(および443)でうまくいきます。

今、私はssh上でgitを使用できるようにしたいと思います。私は何を達成しようとしていることは、私は

> ssh mydomain.com

をすれば、私は私のホストサーバのターミナルに終わるだろうということです。私は

> ssh gitlab.mydomain.com

をすれば、その後、私はGitLabコンテナのターミナルで終わるしたいです。

私はホスト上のいくつかの未使用ポートにコンテナのポート22をマップできることを知っています。そのため、たとえば、ssh-ingによってコンテナにアクセスできます。ポート10022ですが、私はそれをきれいで明瞭な方が好きです。

特定のドメインが検出されたときに、ホストマシン上のsshサーバーを何らかの形でプロキシとして動作させる方法はありますか?

答えて

1

HTTPまたはSNI対応のTLSサービスとは異なり、SSHサービスには名前ベースのロジック検出がありません。

長短は、ip/portごとに1つのsshデーモンを取得することです。

回避方法があります。

ポートノッキングが考えられます。ファイアウォールが送信するノックに基づいて、どのサービスを転送するかを変更することができます。

もう1つのことは、使用するSSHキーを認識する.ssh/authorized_keysファイルを設定してから、新しいsshプロセスを開始するコマンドを強制して、対応する正しいサービスを削除することです。

また、別のポートで各sshサービスを実行し、クライアント側の設定ファイルで名前 - >ポートマッピングを処理することもできます。

+0

ユーザ名に基づいてリダイレクトを処理するためにsshデーモン(または多分いくつかのログインスクリプト?)を設定する可能性はありますか?常に単一のGitLabインスタンスがあることを考慮して、私はGitLabコンテナにリダイレクト/再接続/トンネルユーザ 'git'を作れるかどうか疑問に思っています。 –

+0

はい、これは可能です。複数のユーザーがいるopensshを実行している "マシン"を設定することができます。各ユーザは、サーバー側で適切なsshコマンドを実行して適切な場所にドロップする独自の強制コマンドを持つことができます。 – programmerq

+1

あなたの回答に感謝します。 [これは解決策になるかもしれません](http://stackoverflow.com/questions/33042817/have-sshd-forward-logins-of-git-user-to-a-gitlab-docker-container)のようです。 –

関連する問題