Git,SSH和ProxyCommand

Var*_*ats 8 git ssh proxy

我有一个防火墙后面的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
Run Code Online (Sandbox Code Playgroud)

通过这种设置,我可以直接通过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.
Run Code Online (Sandbox Code Playgroud)

原始仓库的网址是

ssh://user_git_server@git_server.dom/path/to/bare/repository/repo.git
Run Code Online (Sandbox Code Playgroud)

我想我已经掌握了大部分的东西,但我错过了一个小小的关键部分.我可能做错的任何指示?

inn*_*naM 5

ssh://user_git_server@git_server.dom/path/to/bare/repository/repo.git
                      ^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

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

正确的 URL 应该是

ssh://user_git_server@git_server/path/to/bare/repository/repo.git
Run Code Online (Sandbox Code Playgroud)

或者干脆

user_git_server@git_server:/path/to/bare/repository/repo.git
Run Code Online (Sandbox Code Playgroud)

  • 不,这也可以。这是一个 [ssh-uri](http://stackoverflow.com/a/9835653/6309),即非 [scp 语法](http://stackoverflow.com/a/14134674/6309) t 使用 `~/.ssh/config` 文件。如果您按照建议使用 [scp 语法](http://www.hypexr.org/linux_scp_help.php),则无需指定用户名:`ssh://git_server:/path /to/bare/repository/repo.git`。你的意思是 ['colon'](http://en.wikipedia.org/wiki/Colon_%28punctuation%29),而不是 'color' ;) (2认同)