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,透明,仿佛可以直接访问。
我有:本地、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,透明,仿佛可以直接访问。