git clone无法通过HTTP开始中继

时间:2018-05-19 15:37:45

标签: linux github ssh

使用git clone时,我遇到了错误。 这是命令和错误信息。

[user@linux]$ git clone git@github.com:username/repertory.git
FATAL: failed to begin relaying via HTTP.
ssh_exchange_identification: Connection closed by remote host
fatal: Could not read from remote repository.

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

除了git @ github,git clone https:// ......和git clone git:// ......效果很好。所以我猜ssh protocal有问题,然后我检查了ssh。

[user@linux]$ ssh -T git@github.com
Hi username! You've successfully authenticated, but GitHub does not provide shell access.

似乎我可以通过ssh协议正确连接到github。但是通过ssh git clone有什么问题?

2 个答案:

答案 0 :(得分:0)

此错误消息来自connect.c from SSH

这是一个SSH Proxy Command -- connect.c,通过SOCKS和https代理进行网络连接的简单中继命令:您可以使用此命令在防火墙之外进行SSH会话。

因此,请检查是否需要这样的连接:如果您在防火墙后面的企业中,则可能需要它,但在这种情况下,请联系您的IT支持团队以检查此类解决方案的有效性/批准。

该错误消息表明即使是这种SSH模式(通过https代理中继)也可能被阻止。

如果您不在企业环境中,并且不需要代理,请从环境变量和HTTPS(S)/PROXY文件中删除它们(git config)。

答案 1 :(得分:0)

如果您使用代理,许多公司防火墙会阻止在 443 以外的端口上访问 CONNECT 方法。GitHub 使用主机“ssh.github.com”运行侦听端口 443 的 SSH 服务器.

首先,使用以下内容配置您的 SSH ~/.ssh/config

Host github.com, ssh.github.com
    User git
    Hostname ssh.github.com
    Port 443
    ProxyCommand socat - PROXY:localhost:%h:%p,proxyport=3128

在上面的示例中,我假设您在主机 localhost 和端口 3128(例如 cntlm)上运行网络代理。

您也可以用语法稍有不同的 socatnc 代替 connect-proxy

测试:

ssh -T git@ssh.github.com
Hi username! You've successfully authenticated, but GitHub does not provide shell access.

然后:

git clone git@ssh.github.com:username/repository.git