Ubuntu 20.04连接GitHub/GitLab SSH时报kex_exchange_identification错误
错误原因
从你提供的debug日志可以确认,TCP连接到GitLab的22端口已经建立成功,但在SSH密钥交换的初始阶段连接被远端重置,两个平台同时出现该问题,常见触发原因如下:
- 网络运营商或本地路由、防火墙拦截了指向境外站点的22端口SSH流量,这是该类问题最常见的诱因
- 本地系统的防火墙规则(iptables/ufw)限制了SSH出站连接
- 本地SSH密钥权限异常,或公钥未正确上传到对应平台的账户配置中(该情况一般不会同时触发两个平台报错,概率较低)
- 本地公网IP被两个平台同时临时限制,该场景概率极低
可行解决方案
方案1:切换SSH连接端口(优先尝试,适配22端口被拦截的场景)
GitHub和GitLab均支持通过443端口传输SSH流量,你可以修改本地SSH配置规避22端口拦截:
- 编辑
~/.ssh/config文件,没有则新建该文件,加入如下配置:
Host github.com HostName ssh.github.com Port 443 User git Host gitlab.com HostName altssh.gitlab.com Port 443 User git
- 保存文件后重新执行
ssh -T git@github.com、ssh -T git@gitlab.com测试连通性即可。
方案2:排查本地网络与防火墙规则
- 执行
telnet gitlab.com 22测试22端口连通性,如果连接直接失败或很快断开,即可确认22端口被当前网络拦截 - 执行
sudo ufw status检查本地系统防火墙规则,确认没有限制出站22、443端口的规则 - 切换其他网络环境(如手机热点)测试,如果切换后连接正常,说明是当前所用网络的运营商层面拦截了SSH流量
方案3:校验SSH密钥与权限
- 确认你的
~/.ssh/id_rsa.pub公钥内容已经正确上传到GitHub、GitLab的账户SSH密钥配置中 - 执行如下命令修正SSH目录与文件权限,权限异常也会触发连接失败:
chmod 700 ~/.ssh chmod 600 ~/.ssh/id_rsa chmod 644 ~/.ssh/id_rsa.pub
如果以上方案均无法解决问题,你可以临时改用HTTPS协议进行Git仓库的推拉操作。
内容的提问来源于stack exchange,提问作者Fazar
相关产品推荐
相关产品推荐

