
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
,就可以稳定地进行代码拉取、提交和私有仓库管理。