ubuntu - 如何根据请求的域将 SSH 转发到 GitLab Docker 容器中

标签 ubuntu docker ssh proxy portforwarding

我的服务器运行 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-ing 访问容器,例如。端口 10022,但我更喜欢它干净清晰。

有没有办法让主机上的 ssh 服务器在检测到特定域时以某种方式充当代理?

最佳答案

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

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

有一些可行的变通方法。

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

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

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

关于ubuntu - 如何根据请求的域将 SSH 转发到 GitLab Docker 容器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40425404/

相关文章:

php - 在 Ubuntu 中启动时运行 php 进程

regex - Linux 命令 : Find & Replace using regex not woking as expected

linux - 如何从使用 sudo 运行的程序访问用户的 ssh key ?

c - 从应用程序 makefile 运行库 makefile

matlab - XLSREAD 无法在 MATLAB R2012 中读取文件

linux - 如何在 ubuntu 终端上使用 gtalk/hangout?

docker - 无法使用 Go SDK for Docker 推送图像

docker - 在一个 Docker Swarm 部署中组合多个项目的良好实践?

docker - Cloc在Docker容器中不进行递归搜索

Python:尝试通过 SSH 执行命令时 Paramiko 挂起