Git远程命令(pull/push)突然变慢的排查求助
Git SSH连接GitHub缓慢问题排查分析
日志解读核心要点
从git pull跟踪日志和ssh -Tvvv git@github.com调试输出中,重点锁定以下耗时节点:
- DNS解析环节:如果日志中
debug1: resolve hostname github.com后出现长时间停顿,说明DNS解析存在延迟 - SSH握手阶段:
- 密钥协商:若
debug1: Offering public key后等待过久,大概率是本地密钥加载缓慢,或是GitHub端密钥验证队列阻塞 - 算法协商:卡在
debug1: kex_exchange_identification阶段时,多为SSH协议版本/算法不匹配,或本地客户端与GitHub服务器的算法协商耗时过长
- 密钥协商:若
- TCP连接环节:若
debug1: Connecting to github.com [IP地址] port 22后停顿,结合你排除网络问题的前提,重点排查SSH上层逻辑即可
可能的耗时原因
- 本地SSH配置冗余:
~/.ssh/config中存在过多无效Host条目、冗余密钥路径,导致SSH客户端遍历密钥时耗时增加 - 密钥类型兼容性:使用了GitHub优先级较低的密钥类型(如DSA),或本地同时加载多个密钥,SSH逐个尝试验证引发延迟
- MacOS系统SSH服务异常:M1芯片的MacOS 15.1.1可能存在SSH客户端与系统框架的兼容性问题,比如Apple Git依赖的系统密钥链访问缓慢
- GitHub IP路由问题:虽你排除了网络问题,但部分GitHub IP段可能在你的环境下路由绕远,导致TCP握手后SSH交互延迟
进一步测试/排查方法
- 简化SSH配置:
- 备份
~/.ssh/config后清空内容,仅保留GitHub相关配置:Host github.com HostName github.com User git IdentityFile ~/.ssh/你的常用密钥文件名 IdentitiesOnly yes - 执行
ssh -Tvvv git@github.com对比耗时变化
- 备份
- 测试推荐密钥类型:
- 生成GitHub推荐的ED25519类型密钥:
ssh-keygen -t ed25519 -C "你的邮箱" - 将新密钥添加到GitHub账户,指定该密钥连接测试:
ssh -i ~/.ssh/id_ed25519 -T git@github.com,观察是否提速
- 生成GitHub推荐的ED25519类型密钥:
- 绕过系统密钥链:
- 临时禁用SSH对密钥链的访问:
export SSH_AUTH_SOCK="",再执行git pull或ssh -T git@github.com,如果速度恢复,说明密钥链访问是瓶颈
- 临时禁用SSH对密钥链的访问:
- 切换SSH端口测试:
- 部分环境下22端口被限流,尝试改用443端口连接:
修改~/.ssh/config:
再测试连接速度Host github.com HostName ssh.github.com Port 443 User git IdentityFile ~/.ssh/你的密钥文件
- 部分环境下22端口被限流,尝试改用443端口连接:
- 替换SSH客户端:
- 当前使用的是Apple自带Git配套的系统SSH,尝试安装独立OpenSSH:
brew install openssh,用/usr/local/bin/ssh -T git@github.com测试,对比速度差异
- 当前使用的是Apple自带Git配套的系统SSH,尝试安装独立OpenSSH:
内容的提问来源于stack exchange,提问作者Niels Kristian
相关产品推荐
相关产品推荐

