github连接不了?


背景

国内访问 GitHub 经常遇到 HTTPS(443端口)被限速、连接超时,甚至 SSH 默认端口22被屏蔽的问题,导致克隆、拉取私有仓库非常困难。


目标

  • 通过 SSH 协议绕过端口22封锁,改用端口443访问 GitHub
  • 保证 git clone、git fetch、push 等操作正常
  • 实现服务器和本地的稳定连接
  • 安全高效,避免暴露敏感信息

核心原理

GitHub 提供了一个特殊的 SSH 服务地址:ssh.github.com,它监听在 443 端口,允许通过该端口进行 SSH 连接。

这是利用 443 端口常用于 HTTPS 流量,通常不会被封锁,从而实现绕过网络限制。


配置步骤详解

1. 生成 SSH Key(如果还没)

ssh-keygen -t ed25519 -C "your_email@example.com"

默认生成密钥对在 ~/.ssh/id_ed25519~/.ssh/id_ed25519.pub

将公钥 id_ed25519.pub 内容复制,添加到 GitHub Settings > SSH and GPG keys


2. 配置 SSH 连接走 443 端口

编辑 SSH 配置文件 ~/.ssh/config,添加:

Host ssh.github.com
  Hostname ssh.github.com
  Port 443
  User git
  IdentityFile ~/.ssh/id_ed25519
  IdentitiesOnly yes

3. 使用 SSH 方式克隆仓库

将仓库地址改成:

git clone ssh://git@ssh.github.com:443/username/repo.git

或者修改已有仓库远程地址:

git remote set-url origin ssh://git@ssh.github.com:443/username/repo.git

4. 验证 SSH 连接是否正常

ssh -T -p 443 git@ssh.github.com

如果显示类似:

Hi username! You've successfully authenticated, but GitHub does not provide shell access.

说明连接成功。


5. 其他 SSH 端口 443 相关注意事项

  • 确保本地防火墙或服务器安全组允许出站和入站 443 端口的 SSH 流量
  • 不建议将 Host * 全局设置为端口443,容易影响其他服务器连接,推荐针对 ssh.github.com 单独配置
  • 使用 IdentitiesOnly yes 强制只用指定密钥,避免多个密钥干扰认证失败
  • 私钥权限应设置为 chmod 600 ~/.ssh/id_ed25519,配置文件权限 chmod 600 ~/.ssh/config

6. 解决服务器无法联网获取依赖的问题

  • 克隆私有仓库时用上述 SSH 方式
  • 安装 Node.js、nvm 等依赖时,可以先在本地下载好离线包,再上传服务器离线安装
  • 使用代理工具(如 proxychains)或 VPN,辅助访问被屏蔽的外网资源

7. 典型问题与排查

问题描述解决方案
Permission denied (publickey)检查私钥是否添加,权限是否正确,SSH config 是否生效
Connection timed out检查防火墙、网络是否阻断 443 端口,确认用的是 ssh.github.com
HTTPS 连接超时改用 SSH 方式,确保远程地址和端口配置正确
远程仓库找不到(404)确认仓库地址拼写和权限,使用 SSH 方式时路径正确

结语

使用 SSH 443 端口是绕过国内网络限制访问 GitHub 最稳妥的方式,既避免了 HTTPS 被限速的问题,也解决了默认 SSH 22 端口被屏蔽的烦恼。

只要按以上步骤配置 SSH key 和 ~/.ssh/config,就可以稳定地进行代码拉取、提交和私有仓库管理。