Skip to main content

关于国内github的连接问题

1 min 123 words

我发现的奇怪现象:用 SSH 连 GitHub 好像比 HTTPS 更稳

我是个刚接触 GitHub 不久的新手,下面只是我个人的一点观察,不一定对,欢迎大家指正。

刚开始学 Git 的时候,我按网上的教程,clone 仓库用的是 HTTPS 地址,比如:

git clone https://github.com/用户名/仓库名.git

刚开始还行,但后来经常遇到这样的报错:

fatal: unable to access 'https://github.com/...': 
Recv failure: Connection was reset

有时候是 push 到一半卡住,有时候是拉取代码超时。我一开始以为是自己的网络不好,但访问其他网站又很正常。

后来有人让我试试 SSH 的方式:

git clone git@github.com:用户名/仓库名.git

抱着试一试的心态配置了一下 SSH 密钥,结果发现——居然再也没有断过了。不管是 clone、push 还是 pull,都非常流畅。

我猜的原因

我查了一些资料(虽然很多看不太懂),大概知道:

  • HTTPS 用的是 443 端口
  • SSH 用的是 22 端口

我猜可能是这样的:国内网络里有防火墙(简称 GFW),它会检测通过 HTTPS 传输的流量。当它看到里面带有 github.com 这样的关键词(比如在 TLS 握手阶段的 SNI 字段里,或者 HTTP 请求的 Host 头里),就可能会主动打断连接,比如发一个重置包把 SSL 连接中断掉。

而 SSH 用的是 22 端口,流量格式和 HTTPS 不一样,防火墙可能不会专门去检查或者阻断它,所以 SSH 反而一直很稳定。

但这完全是我瞎猜的,我不懂底层原理,很可能说的不对。 也可能只是我所在的城市、我的运营商比较特殊。

我的建议

如果你也遇到了 HTTPS 连 GitHub 经常失败、重置的问题,不妨试试切换到 SSH:

  1. 生成 SSH 密钥(打开终端输入):

    ssh-keygen -t ed25519 -C "你的邮箱"

    一路回车就行。

  2. 把公钥添加到 GitHub:

    • 运行 cat ~/.ssh/id_ed25519.pub,复制输出的内容
    • 打开 GitHub → 头像 → Settings → SSH and GPG keys → New SSH key
    • 粘贴进去,保存
  3. 修改已有仓库的远程地址:

    git remote set-url origin git@github.com:用户名/仓库名.git

之后你的所有 Git 操作就会走 SSH 通道了。

题外话

说实话,我不确定这个规律有没有普遍性。可能有些人用 HTTPS 也很稳定,也有些人用 SSH 也会被墙。
但对我这个初学者来说,从 HTTPS 换成 SSH 之后,体验真的好了很多。
如果你也被连接问题困扰过,不妨试一下,反正不亏。