Git通过Wi-Fi推送失败报Broken pipe错误,以太网可正常使用
解决OSX 10.13 Wi-Fi下Git Push SSH连接断开的问题
我之前在OSX 10.14上碰到过几乎一模一样的问题,折腾了好一阵才搞定,给你几个亲测有效的解决思路:
1. 优化SSH连接稳定性(最常见的解决办法)
Wi-Fi环境下的SSH连接很容易因为长时间无数据传输触发超时,导致packet_write_wait: Broken pipe错误。你可以通过修改SSH配置来添加心跳包:
- 打开终端,编辑(或新建)
~/.ssh/config文件:nano ~/.ssh/config - 添加以下配置内容:
这个设置会让SSH客户端每隔60秒向服务器发送一个心跳包,连续3次失败才断开连接,能有效避免Wi-Fi下的超时断开。Host * ServerAliveInterval 60 ServerAliveCountMax 3
2. 临时切换到HTTPS协议排查问题
如果怀疑是Wi-Fi环境限制了22端口,你可以先切换到HTTPS协议推送,验证是不是SSH端口的问题:
- 查看当前远程仓库地址:
git remote -v - 将SSH地址改为HTTPS格式(比如从
git@xxx.xx.xxx.xxx:your-repo.git改成https://xxx.xx.xxx.xxx/your-repo.git):git remote set-url origin https://xxx.xx.xxx.xxx/your-repo.git - 尝试执行
git push,如果能成功,说明确实是Wi-Fi下的SSH端口被限制了。
3. 重置OSX的Wi-Fi网络配置
有时候系统的网络配置缓存会导致奇怪的端口限制,重置Wi-Fi配置试试:
- 打开「系统偏好设置」→「网络」,选中Wi-Fi选项;
- 点击左下角的齿轮图标,选择「删除配置」,然后重新连接你的Wi-Fi网络。
4. 检查系统防火墙设置
OSX的防火墙可能会针对Wi-Fi网络设置了特殊规则:
- 打开「系统偏好设置」→「安全性与隐私」→「防火墙」;
- 临时关闭防火墙,然后尝试
git push,如果能成功,说明是防火墙阻止了Wi-Fi下的SSH连接; - 你可以在防火墙的「防火墙选项」里,添加允许
git或ssh进程通过Wi-Fi网络的规则。
5. 排查Wi-Fi路由器的限制
如果换了两个Wi-Fi都出现问题,也可能是路由器层面的端口限制:
- 登录你的路由器后台(通常是
192.168.1.1或类似地址),检查是否有针对22端口的防火墙或端口转发规则; - 尝试重启路由器,很多临时的路由器故障会导致这类连接问题;
- 如果路由器确实封了22端口,可以联系服务器管理员将SSH服务切换到其他端口(比如2222),然后在本地
~/.ssh/config里指定端口:Host xxx.xx.xxx.xxx Port 2222
6. 先测试SSH连接稳定性
在推送前,先测试SSH连接是否能稳定保持:
ssh -T git@xxx.xx.xxx.xxx
如果这个连接过程中也出现断开,那问题肯定出在SSH连接的稳定性上,重点优化前面的心跳配置或排查路由器问题。
内容的提问来源于stack exchange,提问作者Gerard




