【问题标题】:How to forward SSH into GitLab Docker container based on requested domain如何根据请求的域将 SSH 转发到 GitLab Docker 容器
【发布时间】:2017-03-18 10:46:08
【问题描述】:

我的服务器运行 Ubuntu 16.04 并安装了 Docker 引擎。

在一个容器中,我正在运行GitLab 服务(当然还有许多其他包含其他东西的容器)。我们称它为 Docker 网络地址GITLAB_IP

我正在使用nginx-proxy 基于VIRTUAL_HOST 环境变量代理来自外部的HTTP 请求。

DNS 已设置好,所有以*.mydomain.com 为目标的内容都会转到mydomain.com 并在同一主机上解析。

发往 mydomain.com 的请求由我的主 nginx 容器提供服务,而发往 gitlab.mydomain.com 的请求由我的 GitLab 容器提供服务。

在端口 80(和 443)上一切正常。

现在我希望能够通过 ssh 使用 git。我想要实现的是,如果我这样做了

> ssh mydomain.com

我将在我的主机服务器的终端结束。如果我这样做了

> ssh gitlab.mydomain.com

然后我想进入 GitLab 容器的终端。

我知道我可以将容器的端口 22 映射到主机上某个未使用的端口上,因此我可以通过 ssh 访问容器,例如。端口 10022,但我更喜欢它干净利落。

当检测到特定域时,有什么方法可以让主机上的 ssh 服务器充当代理?

【问题讨论】:

    标签: ubuntu docker ssh proxy portforwarding


    【解决方案1】:

    与启用 HTTP 或 SNI 的 TLS 服务不同,SSH 服务没有任何类型的基于名称的逻辑检测。

    总而言之,每个 ip/端口都有一个 ssh 守护进程。

    有一些可行的解决方法。

    端口敲门是一种可能性。您可以根据您发送的敲门声更改防火墙将您转发到的服务。

    您可以做的另一件事是设置一个 .ssh/authorized_keys 文件,该文件将识别您使用的 SSH 密钥,然后强制执行一个命令,该命令将启动一个新的 ssh 进程并让您使用正确的相应服务。

    您还可以在不同的端口上运行每个 ssh 服务,并让客户端配置文件处理名称->端口映射。

    【讨论】:

    • 有没有可能设置 ssh 守护进程(或者一些登录脚本?)来处理基于用户名的重定向?考虑到总是只有一个 GitLab 实例,我想知道是否可以将其重定向/重新连接/隧道用户 git 到 GitLab 容器。
    • 是的,这应该是可行的。您可以设置一个运行具有多个用户的 openssh 的“机器”。每个用户都可以在服务器端拥有自己的强制命令,该命令将执行适当的 ssh 命令将它们放到适当的位置。
    • 感谢您的回复。对我来说好像this could be the solution
    猜你喜欢
    • 2019-02-10
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 2014-08-23
    • 1970-01-01
    相关资源
    最近更新 更多