执行git fetch等基础Git命令时偶发kex_exchange_identification错误
问题产生原因
该报错属于SSH连接建立阶段的链路重置问题,且随机复现,和SSH密钥权限、仓库权限无关,常见触发原因如下:
- 网络层不稳定:本地网络波动、运营商路由抖动、出口IP动态变换,或是防火墙/IDS设备做了SSH连接频率限制,随机丢弃超出阈值的请求
- GitHub侧限流:GitHub对同一IP的SSH连接请求有频率限制,短时间内发起多次SSH请求会被临时拦截,触发连接重置
- SSH配置异常:本地SSH的密钥交换算法、超时参数配置不当,或是SSH代理/跳板机不稳定,导致连接建立过程随机中断
- MTU不匹配:本地网络或中间路由的MTU值设置过大,SSH握手阶段的大包被丢弃,触发连接重置
排查与解决方法
第一步:验证网络连通性稳定性
- 长时间执行ping命令观察丢包情况:
Windows执行ping github.com -t,Linux/macOS执行ping github.com,如果丢包率超过1%,优先排查本地网络问题 - 多次测试TCP 22端口连通性:执行
telnet github.com 22,观察是否随机出现连接失败,确认是否为端口被拦截问题
第二步:调整SSH配置
在本地~/.ssh/config文件(不存在则手动新建)中添加以下配置:
Host github.com HostName github.com User git IdentityFile ~/.ssh/id_rsa # 替换为实际的私钥文件路径 ServerAliveInterval 60 ServerAliveCountMax 5 KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256 TCPKeepAlive yes
配置完成后多次执行ssh git@github.com测试,观察是否还会随机报错。
第三步:切换Git连接协议验证
如果SSH协议持续不稳定,可以临时切换为HTTPS协议测试,执行命令修改远程仓库地址:git remote set-url origin https://github.com/用户名/仓库名.git
修改后再次执行git fetch,如果HTTPS协议正常则可以确定是SSH链路相关问题。
第四步:排查网络设备限制
- 临时关闭本地防火墙、杀毒软件后测试,确认是否为本地安全软件拦截了SSH请求
- 如果使用公司网络,确认运维是否配置了SSH连接频率限制、端口拦截规则
- 切换手机热点等其他网络环境测试,排除当前网络的规则限制问题
第五步:调整MTU值
如果上述方法都无效,可以尝试降低本地网络的MTU值,从默认1500修改为1400:
- Windows:
netsh interface ipv4 set subinterface "网络连接名" mtu=1400 store=persistent - Linux:
sudo ifconfig 网卡名 mtu 1400 - macOS:
sudo networksetup -setMTU "网络服务名" 1400
内容的提问来源于stack exchange,提问作者Cissy Liu
相关产品推荐
相关产品推荐

