使用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有什么问题?
答案 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
)上运行网络代理。
您也可以用语法稍有不同的 socat
或 nc
代替 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