9

我有一个位于防火墙后面的 git 服务器。我可以从家里访问防火墙,但不能访问 git 服务器。但是,我可以从防火墙访问 git 服务器(即我可以 SSH 到防火墙,然后从防火墙 SSH 到 git 服务器)。我正在寻找从我的家用机器推送和拉取到 git repos,我认为 SSH ProxyCommand 会做到这一点。所以我在我的 SSH 配置文件中添加了以下内容:

Host git_server
 HostName git_server.dom
 User user_git_server
 IdentityFile ~/.ssh/id_rsa
 ProxyCommand ssh firewall exec nc %h %p

Host firewall
 HostName firewall.dom
 User user_firewall
 IdentityFile ~/.ssh/id_rsa

有了这个设置,我可以直接通过 SSH 连接到 git 服务器ssh git_server。但是,需要与服务器对话的 git 命令不起作用。git remote show origin失败并显示以下消息:

ssh: connect to host git_server.dom port 22: Operation timed out
fatal: Could not read from remote repository.

Please make sure you have the correct access rights and the repository exists.

原始仓库的 url 是

ssh://user_git_server@git_server.dom/path/to/bare/repository/repo.git

我想我已经完成了大部分工作,但缺少一个关键的小部分。任何指向我可能做错了什么的指针?

4

2 回答 2

5
ssh://user_git_server@git_server.dom/path/to/bare/repository/repo.git
                      ^^^^^^^^^^^^^^

您为存储库使用了错误的 URL。由于您的 ssh 配置文件有一个主机条目,因此git_server您还需要在存储库 URL 中使用该主机名,否则 SSH 将不会使用 ProxyCommand。

正确的 URL 应该是

ssh://user_git_server@git_server/path/to/bare/repository/repo.git

或者干脆

user_git_server@git_server:/path/to/bare/repository/repo.git
于 2013-06-15T09:43:43.477 回答
1

正如“ Git clone from remote ssh repository - 在执行克隆命令之前更改远程网络上的机器netcat”中所述,您可能在代理服务器上没有该命令。

您还有另一个解决方案socat,它将使用 CONNECT 方法与 HTTP(S) 代理服务器协商,为您提供一条通往远端服务器的干净管道。参见socat

host gh
    user git
    hostname github.com
    port 22
    proxycommand socat - PROXY:your.proxy.ip:%h:%p,proxyport=3128,proxyauth=user:pwd

现在你可以说(例如):

git clone gh:sitaramc/git-notes.git
于 2013-06-15T03:15:43.610 回答