我的本地网络上有一个 gitlab 服务器,还有一个可以从网络外部通过 ssh 访问的服务器。
有没有一种方法可以配置服务器,我可以通过 SSH 连接到服务器,这样当我使用时:
它将其发送到本地网络上的 Gitlab 服务器?有点像 Nginx 反向代理,但使用 ssh。
编辑:
我环顾四周,发现了一些东西这里这看起来像我想要的。
通过负载均衡器访问
如果您想提供更标准的 git 体验,您可以手动 > 设置和配置外部负载均衡器以指向给定的 GitLab 节点。这应该将流量从端口 22 路由到 > GitLab 节点上的端口 2222。然后,您可以将 DNS 记录指向负载均衡器。
这看起来像是我想要做的,但是我该如何实现呢?
编辑2:
这是一张图片,希望能够澄清我正在尝试做的事情。
(那些红线也应该穿过互联网。)
答案1
像 nginx 这样的 HTTP 服务器能够根据主机名进行代理,因为它是在请求的 HTTP/1.1 Host 标头中发送的。 SSH没有虚拟主机这个概念,客户端根本不发送主机名。
您有三个选择:
- 使用端口转发使您的 gitlab 服务器直接可用。
- 通过(附加)IPv4 或 IPv6 地址使您的 gitlab 服务器可用。
- 创建一个进入您的网络的 SSH 隧道,并通过此隧道将 SSH 连接代理到您的 git 服务器。
转发端口
这可能是干扰“公共服务器”的最简单的方法。设置网关将端口 2222 转发到 192.168.2.26:22。然后使用进行连接。对于,请使用类似 的 URL 。ssh -p2222 [email protected]
git
ssh://[email protected]:2222/repo.git
或者,您可以只使用或者如果您使用以下命令创建文件:ssh://[email protected]/repo.git
[email protected]:repo.git
~/.ssh/config
Host git.example.com
Port 2222
附加 IPv4 或 IPv6 地址
如果您有家庭网络,获得 IPv4 地址可能是不可能的,但一些商业提供商可以做到。如果您的网络支持 IPv6(端到端),那么您可以只使用正常路由,而无需使用令人讨厌的代理或 NAT 黑客攻击。
SSH隧道
您可以使用该ProxyCommand
选项指定将 SSH 连接代理到 的命令git.example.com
。在您的情况下,“公共服务器”是代理,因此该命令应该连接到该服务器。
让我们从配置片段开始~/.ssh/config
:
Host git.example.com
ProxyCommand ssh -W %h:%p [email protected]
在此代码片段中,该-W %h:%p
选项将扩展为-W git.example.com:22
并将标准输入和输出重定向到所述主机 (git.example.com)。这使您的本地 SSH 客户端能够与您的 gitlab 服务器通信。您可以再次使用任何 URL,例如[email protected]:repo.git
,代理将对 git 客户端透明。