Lazy loaded image
技术分享
踩坑记录:开启 OpenClash 后 Git Pull/SSH 瞬间卡死的解决办法
字数 1041阅读时长 3 分钟
2026-5-12
2026-5-12
type
Post
status
Published
date
May 12, 2026
slug
fuck-openclash-connect-github
summary
在日常开发中,很多开发者为了提升依赖下载速度,会在软路由上配置 OpenClash(如 Clash Meta / Mihomo 内核)。但在开启 OpenClash 后,你可能会遇到一个非常诡异的现象:通过 HTTPS 的操作一切正常,但一执行 git pullgit push(通过 SSH 方式)就无限期卡死,没有任何报错。 今天就来记录并分享这个坑的根本原因以及全套排查、解决方案。
tags
吐槽
开发
category
技术分享
icon
password
URL

在日常开发中,很多开发者为了提升依赖下载速度,会在软路由上配置 OpenClash(如 Clash Meta / Mihomo 内核)。但在开启 OpenClash 后,你可能会遇到一个非常诡异的现象:通过 HTTPS 的操作一切正常,但一执行 git pullgit push(通过 SSH 方式)就无限期卡死,没有任何报错。

 

🔍 问题排查与定位

git pull 卡住时,首先通过以下命令查看 Windows 端的 SSH 详细握手日志:
ssh -vT git@github.com
当时的终端报错/卡死日志如下:
OpenSSH_for_Windows_9.5p2, LibreSSL 3.8.2 debug1: Reading configuration data C:\\Users\\19414/.ssh/config debug1: Connecting to github.com port 22. debug1: Connection established. <-- 【注意:这里提示 TCP 连接其实已经建立了】 debug1: identity file C:\\Users\\19414/.ssh/id_rsa type 0 ...(中间省略一堆私钥加载日志)... debug1: Local version string SSH-2.0-OpenSSH_for_Windows_9.5 <-- 【在这里无限期卡死!】

💡 根本原因分析

  1. 不是 DNS 污染:日志中成功解析出了 GitHub 的 IP(20.205.243.166)。
  1. 不是网络断开Connection established 说明本地与服务器的 TCP 三次握手已经成功。
  1. 卡死在协议协商阶段:当卡在 Local version string... 时,意味着本地正在向服务器发送 SSH 版本大包,或者正在等待服务器回包。由于 OpenClash 开启了 TUN 模式、混合模式或进行了防火墙流量劫持,导致网络的大包(MTU/MSS)分片在软路由内核中被错误丢弃或阻断。也就是说,小数据包能通,但 SSH 握手的大数据包直接被“闷死”了。

🛠️ 解决方案

以下提供 3 种亲测有效的解决方案,由易到难,大家可以根据自己的需求选择。

方案一:让 GitHub 改走 443 端口(最推荐,无痛无副作用,也是我尝试解决的方案)

GitHub 官方非常贴心地在 443 端口上同样部署了 SSH 服务。由于 443 端口通常走常规的 HTTPS 代理规则,不容易触发软路由的内核大包丢包 Bug。
  1. 打开 Windows 本地目录:C:\Users\你的用户名\.ssh\
  1. 找到名为 config 的文件(如果没有则新建一个,无后缀名)。
  1. 用文本编辑器打开,添加或修改以下配置:
Host github.com Hostname github.com Port 443 User git
效果:保存后再次执行 ssh -vT git@github.com,瞬间畅通无阻!

方案二:修改本地网卡的 MTU 值(解决大包卡死, AI提出的,未测试)

如果是软路由虚拟网卡导致的 MTU 冲突,可以直接拉低本地网卡的 MTU 最大传输单元。
  1. 鼠标右键点击 Windows 开始徽标,选择 终端管理员PowerShell (管理员)
  1. 输入以下命令查看你当前连接的网卡名称(例如 WLAN以太网):
    1. netsh interface ipv4 show subinterfaces
  1. 将该网卡的 MTU 强制修改为 1400(默认一般是 1500):
    1. # 请将下方的 "WLAN" 替换为你实际看到的网卡名称 netsh interface ipv4 set subinterface "WLAN" mtu=1400 store=persistent

方案三:调整 OpenClash 后台配置(从源头解决, AI提出的,未测试)

如果你不想动电脑上的任何配置,可以直接去软路由后台调整 OpenClash 的防火墙策略。
  1. 登录 OpenClash 后台,进入 插件设置 -> 常规设置
  1. 在页面中找到 MSS Pmtu 探测开启 MSS 钳制 (MSS Clamping) 选项。
  1. 勾选开启。该功能会强制让通过路由器的所有 TCP 连接自动调整最大报文段大小(MSS),防止大包被丢弃。
  1. 滚动到页面下方,点击 应用配置 重启 OpenClash 即可。

📝 总结

对于开发者来说,修改本地 .ssh/config 改走 443 端口是最优雅、最稳妥的方案,建议大家遇到类似问题时优先采用。

上一篇
Windows 重装后,几个必装的软件
下一篇
拒绝地区限制!一键强制开启 Chrome 原生 Gemini AI 助手(无损/免重装)