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

Ubuntu 如何根据请求的域将SSH转发到GitLab Docker容器中,ubuntu,docker,ssh,proxy,portforwarding,Ubuntu,Docker,Ssh,Proxy,Portforwarding,我的服务器运行Ubuntu 16.04,安装了Docker引擎 在一个容器中,我运行服务(当然还有许多其他包含其他内容的容器)。我们把它叫做Docker网络地址GITLAB\u IP 我使用基于VIRTUAL\u HOST环境变量代理来自外部的HTTP请求 DNS已设置,因此针对*.mydomain.com的所有内容都将转到mydomain.com并在同一主机上解析 前往mydomain.com的请求由我的主nginx容器提供服务,而前往gitlab.mydomain.com的请求由我的gitl

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

在一个容器中,我运行服务(当然还有许多其他包含其他内容的容器)。我们把它叫做Docker网络地址
GITLAB\u IP

我使用基于
VIRTUAL\u 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服务器在检测到特定域时以某种方式充当代理?

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

它的长短不一之处在于,每个ip/端口都有一个ssh守护进程

有一些变通办法可能奏效

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

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


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

是否可以设置ssh守护程序(或某些登录脚本?)以处理基于用户名的重定向?考虑到总是只有一个GitLab实例,我想知道是否可以让它重定向/重新连接/将用户
git
隧道到GitLab容器。是的,这应该是可行的。您可以设置一台运行openssh的“机器”,该机器有多个用户。每个用户都可以在服务器端拥有自己的强制命令,该命令将执行适当的ssh命令,以将它们放到适当的位置。感谢您的回复。对我来说好像是。