kex_exchange_identification: Connection closed by remote host 问题解决方案
造成的原因
https://github.com/vernesong/OpenClash/issues/1960
代理的节点服务商为了防止滥用把 22 出口端口屏蔽了。
解决方法:
- 关闭代理软件
- 修改代理软件转发配置,不代理22端口
- 更换不屏蔽22端口的节点(比较少)
- 在HTTPS端口使用SSH连接
前两种方法会造成clone不经过代理,下载非常慢。
第四种方法实测即使不启用代理,使用443端口clone也比22端口更快。
在HTTPS端口使用SSH连接
要测试是否可以通过 HTTPS 端口进行 SSH,请运行以下 SSH 命令:
$ ssh -T -p 443 git@ssh.github.com
> Hi USERNAME! You've successfully authenticated, but GitHub does not provide shell access.
如果您能够通过 SSH 连接到git@ssh.github.com
端口 443,您可以覆盖您的 SSH 设置以强制任何与 GitHub.com 的连接通过该服务器和端口运行。
要设置 SSH 配置文件,请编辑该文件~/.ssh/config
,并添加以下部分:
Host github.com
Hostname ssh.github.com
Port 443
User git
Clone存储库
现在,要克隆存储库,您可以运行以下命令:
$ git clone ssh://git@ssh.github.com:443/<YOUR-USERNAME>/<REPOSITORY>.git
设置多个账户后如何通过指定账户 clone
~/.ssh/config
有如下内容:test 为第二个Git账户。
# 默认git@github.com通过443
Host github.com
Hostname ssh.github.com
Port 443
User git
# 默认git用户
Host git@github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
# 为test用户单独设置443
Host test
HostName ssh.github.com
User git
Port 443
IdentityFile ~/.ssh/id_test
测试test用户是否正常:
ssh -T test
克隆则类似的:
git clone ssh://test:443/<YOUR-USERNAME>/<REPOSITORY>.git
已有项目换源:
git remote remove origin
git remote add origin ssh://git@ssh.github.com:443/<YOUR-USERNAME>/<REPOSITORY>.git
# 设置分支远程对应分支****
git branch --set-upstream-to=origin/main main
git branch --set-upstream-to=origin/<remote> <local>