Git、SSH和ProxyCommand
我有一个位于防火墙后面的git服务器。我可以从家里访问防火墙,但不能访问git服务器。但是,我可以从防火墙访问git服务器(也就是说,我可以通过SSH连接到防火墙,然后通过SSH从防火墙连接到git服务器)。我希望从我的家用机器推拉到git repos,我认为SSH-proxy命令可以做到这一点。因此,我在SSH配置文件中添加了以下内容:Git、SSH和ProxyCommand,git,ssh,proxy,Git,Ssh,Proxy,我有一个位于防火墙后面的git服务器。我可以从家里访问防火墙,但不能访问git服务器。但是,我可以从防火墙访问git服务器(也就是说,我可以通过SSH连接到防火墙,然后通过SSH从防火墙连接到git服务器)。我希望从我的家用机器推拉到git repos,我认为SSH-proxy命令可以做到这一点。因此,我在SSH配置文件中添加了以下内容: Host git_server HostName git_server.dom User user_git_server IdentityFile ~/
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_server直接SSH到git服务器。但是,需要与服务器对话的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
我想我已经准备好了大部分东西,但是我缺少了一个关键的小部分。是否有任何指向我可能做错了什么的指针?如“”中所述,您可能在代理服务器上没有该命令 还有,它将使用CONNECT方法与HTTP(S)代理服务器协商,以获得到远端服务器的干净管道。看 现在你可以说(例如): 您为存储库使用了错误的URL。由于您的ssh配置文件有一个用于
git_server
的主机条目,因此您还需要在存储库URL中使用该主机名,否则ssh将不会使用proxy命令
正确的URL应该是
ssh://user_git_server@git_server/path/to/bare/repository/repo.git
或者干脆
user_git_server@git_server:/path/to/bare/repository/repo.git
不,那也行。它是一个,即不使用
~/.ssh/config
文件的非。如果按照建议使用,则无需指定用户名:ssh://git_server:/path/to/bare/repository/repo.git
。你的意思是,不是“颜色”;)我不确定到底是什么让你说“不”。ssh uri何时不使用ssh配置文件?啊。我的意思是“不,OP没有使用错误的url,只是不同的语法不会利用ssh配置文件”。好吧,在这种情况下,似乎你错了。至少我的ssh不关心语法,总是使用我的配置文件。
ssh://user_git_server@git_server.dom/path/to/bare/repository/repo.git
^^^^^^^^^^^^^^
ssh://user_git_server@git_server/path/to/bare/repository/repo.git
user_git_server@git_server:/path/to/bare/repository/repo.git