反向 SSH 隧道

反向 SSH 隧道

我的本地网络上有一个 gitlab 服务器,还有一个可以从网络外部通过 ssh 访问的服务器。

有没有一种方法可以配置服务器,我可以通过 SSH 连接到服务器,这样当我使用时:

ssh [email protected]

它将其发送到本地网络上的 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]gitssh://[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 客户端透明。

相关内容