Git 双 SSH

Git with double SSH

我有:本地、server1、server2。

我在 server2 上有 Git 存储库。但我无法连接它。 我可以使用 SSH 连接到服务器 1,然后使用 SSH 连接到服务器 2。

如何使用双 SSH 将提交推送到 server2?可能吗?

一种解决方案是在网关主机(server1)上准备SSH隧道,并在本地端使用Git(您可能需要使用.ssh/options 配置端口)。

另一个是纯 Git 解决方案,使用 ext:: remote helper 双 SSH(你最好设置无密码 public 基于密钥至少在网关上进行身份验证,否则您将不得不输入两次密码)。例如:

local ~$ git clone \
   "ext::ssh -t user@server1 ssh server2 %S 'repo'" repo
Cloning into 'repo'...
Checking connectivity... done.

这里%S会被Git扩展为相应服务的全称,git-upload-pack为抓取,git-receive-pack为推送。如果登录到内部主机使用交互式身份验证(例如密码),则需要 -t 选项。

请注意,您需要将要下载的名称或目录作为 git clone 命令(此处为 repo)的最后一个参数提供给此处生成的存储库;否则 Git 将使用命令 (ssh ...) 作为名称。

然后您就可以通过名称 "origin".

获取并推送到存储库

看看 ssh 的 ProxyCommand。通过在您的 ssh 配置文件中添加一个部分,例如

Host server2 ProxyCommand ssh -q server1 nc -q0 %h 22

您应该能够将 git 与 repo 和 server2 一起使用。 注意:这需要 nc 在服务器 1 上可用。

此解决方案使得通过 ssh 访问 server2,例如git,透明,仿佛可以直接访问。