2339 字
约 7 分钟
5
S01-B11 · Git 托管与网络可达性:GitHub / Gitee / Gitcode

适用读者:git clone 卡住或超时的人;一台机器要同时对接多个代码平台的人。
前置:S01-B10(Git 入门,含 SSH 密钥)。
实测环境:Ubuntu 24.04.1 / OpenSSH 9.x / Git 2.43.0;ssh.github.com:443 与 ssh -G 解析结果均为 2026-11-05 实测。
覆盖旧文:A-1401(GitHub,72 点)、A-1402(Gitcode,72 点)、A-1403(Gitee,76 点)、A-1937(访问 GitHub 的四种方式,27 点)、A-1850(22 端口改 443,24 点)、A-1376(IDEA 配置 GitHub,34 点)= 305 点。
新增扩展:E-S01-014(~/.ssh/config、ProxyJump、ed25519)。
上一篇:S01-B10 · Git 入门:安装、账户、SSH、克隆与提交
下一篇:S01-X01 · 工具与库速查(基础层附录)。


1. 一句话结论

"连不上"分四层:DNS 解析 → TCP 连接 → SSH 握手 → 身份认证。ssh -vT 的输出能直接告诉你卡在第几层——先分层,再动手。

层 卡住的典型表现 一句话判断
DNS Could not resolve hostname 域名解析失败(网络/本地 DNS/被污染)
TCP Connection timed out / Connection refused 端口不通(防火墙、运营商、平台限制)
握手 Connection closed by remote host 通了但被中间设备掐断
认证 Permission denied (publickey) 网络没问题,是密钥/账号(B10 §3)

第三、四层的区别尤其重要:很多"连不上"其实是"连上了但不认你",改配置就能解决,不需要任何网络手段。


2. 三个平台:差异比想象中大

维度 GitHub Gitee(码云) Gitcode
注册门槛 邮箱即可 需手机号(实名要求更严) 需手机号
SSH 入口 ssh.github.com(默认 22) gitee.com gitcode.com(待核:当前入口域名)
SSH over 443 ✅ 官方支持 支持(待核) 待核
国内直连稳定性 不稳定(时通时断) 稳定 较好
私有仓库免费 ✅ 无限 ✅ 有名额限制 ✅
CI 能力 Actions(额度充足) Gitee Go(额度较小) 待核
镜像/同步 — 支持从 GitHub 同步 支持导入

选型判据:代码的主人是发布者还是协作者。

  • 对外开源、要被全球看到 → GitHub。
  • 国内团队协作、要合规实名 → Gitee。
  • 国内且以"镜像 + 私有"为主 → Gitcode 或自建 GitLab。

三个平台可以同时作为 remote(见 §5.3):origin 指主平台,mirror 指镜像平台,一条 git push --all mirror 完成同步。旧文三篇各讲一家,但没有把"同事多平台"这件事讲透。


3. 访问 GitHub 的四种方式(A-1937 的重排)

方式 做法 速度 风险与代价
① HTTPS 直连 git clone https://github.com/u/r.git 不稳定 私有库需 token,且 token 泄露风险
② SSH(22) git clone [email protected]:u/r.git 不稳定 22 端口常被阻断
③ SSH(443) ssh.github.com:443 较稳定 需要配置(§4);部分企业网络仍拦
④ 代理/镜像 HTTPS_PROXY 或第三方镜像站 取决于节点 镜像站可能缓存旧代码或被篡改,生产依赖不可取

推荐顺序:③ → ② → ① → ④。理由:SSH 密钥认证比 token 更难泄露;443 端口在受限网络里存活率最高;镜像站只适合"读",不适合作为唯一来源。

3.1 关于代理

# 只给 Git 用(不改全局环境变量)
git config --global http.proxy http://127.0.0.1:7890
# SSH 无法用 http 代理,需要 nc/connect 转发(见 §4.3)

别把代理写进全局环境变量:会影响 Maven、npm、IDE 等一切流量,制造"某个工具突然连不上"的幽灵问题。


4. 22 端口不通怎么办(A-1850 的实测验证)

旧文 A-1850 记录了一个真实场景:ssh: connect to host github.com port 22: Connection timed out。解法是把 SSH 流量走到 443。

4.1 先验证 443 到底通不通(实测)

$ timeout 20 ssh -o BatchMode=yes -p 443 -T [email protected]
Warning: Permanently added '[ssh.github.com]:443' (ED25519) to the list of known hosts.
[email protected]: Permission denied (publickey).

注意这条结果怎么读:它返回了 Permission denied (publickey)——说明 TCP 443 通了、SSH 握手成功,只是我这台机器没有 GitHub 密钥。"认证失败"在这里是好消息,它证明链路可用。

# 更底层的端口验证(不依赖 ssh 客户端)
$ exec 3<>/dev/tcp/ssh.github.com/443 && echo "443 端口可连"
443 端口可连

4.2 ~/.ssh/config 写法

Host github
    HostName ssh.github.com
    Port 443
    User git
    IdentityFile ~/.ssh/id_ed25519_github

之后克隆用别名即可:

git clone github:username/repo.git       # 等价于 [email protected]:443/username/repo.git

注意:Host github 这个别名一旦存在,git clone [email protected]:... 仍走 22 端口(别名不匹配)。要么统一用别名,要么把 Host 写成 github.com 让默认域名也走 443:

Host github.com
    HostName ssh.github.com
    Port 443
    User git

4.3 用 ProxyCommand 走 HTTP 代理(SSH 不支持 http 代理)

Host github.com
    HostName ssh.github.com
    Port 443
    User git
    ProxyCommand nc -X connect -x 127.0.0.1:7890 %h %p

macOS 自带 nc 支持 -X connect;Linux 需要 netcat-openbsd。


5. 一台机器三个平台:~/.ssh/config 的写法与验证

5.1 配置(实测用过的样例)

Host github
    HostName ssh.github.com
    Port 443
    User git
    IdentityFile ~/.ssh/id_ed25519_github

Host gitee
    HostName gitee.com
    User git
    IdentityFile ~/.ssh/id_ed25519_gitee

Host blog
    HostName 69.165.66.239
    User root
    Port 22

5.2 验证:ssh -G(不发起连接)

$ for h in github gitee blog; do ssh -G $h | grep -E '^(hostname|port|user) '; done

--- github ---
user git
hostname ssh.github.com
port 443
--- gitee ---
user git
hostname gitee.com
port 22
--- blog ---
user root
hostname 69.165.66.239
port 22

这是排障的第一条命令(2026-11-05 实测):它只解析配置、不连网,能立刻证明"到底是配置写错,还是网络不通"。

5.3 多平台同时作为 remote

git remote add origin  github:me/repo.git
git remote add mirror  gitee:me/repo.git
git push origin main
git push mirror main          # 推送镜像
git remote -v                 # 确认两个地址都在

6. 在 IDEA 里绑定 GitHub(A-1376)

Settings → Version Control → GitHub → +  → 
  A. Log In via GitHub…(浏览器 OAuth,推荐)
  B. Log In with Token…(粘贴 PAT,需勾 repo / read:org 权限)

验证:Settings → Version Control → GitHub 里显示账号;Git → Clone 对话框能列出你的仓库。

现象 原因 修法
OAuth 登录后仍显示未授权 浏览器登录的账号与 IDE 期望不一致 退出 IDE 账号,用 Token 方式重登
Clone 列表为空 Token 缺 repo 权限 重新签发 PAT 并勾选
企业内网无法 OAuth 需要走代理 Settings → Appearance & Behavior → System Settings → HTTP Proxy

Token 不要贴在聊天/文档里。用后即撤销(GitHub → Settings → Developer settings → Tokens)。


7. 排障决策树

git clone / ssh 失败
  │
  1. ssh -G <alias>          → 配置解析对不对?(hostname/port/user/identityfile)
  │      错 → 改 ~/.ssh/config
  │      对 ↓
  2. ssh -vT <alias>         → 卡在哪一层?
  │      Could not resolve hostname → DNS(换 DNS / 检查 /etc/hosts)
  │      Connection timed out     → TCP(端口被封 → 试 443,见 §4)
  │      Connection closed by remote host → 中间设备掐断(换端口/换网络)
  │      Permission denied (publickey) → 认证(回 B10 §3)
  │      成功 ↓
  3. git remote -v           → 远端地址是不是你要的平台/协议?
  4. git ls-remote <url>     → 不克隆、只握手验证仓库可读

git ls-remote 是被低估的一步:它验证"地址 + 认证 + 仓库存在"三件事,但不下载任何内容。


8. 旧文对照

旧文 内容 本篇处理
A-1401 GitHub 平台介绍与使用 并入 §2 差异表;补 SSH over 443 与 PAT 替代密码
A-1402 Gitcode 平台介绍 并入 §2;入口域名标「待核」(旧文口径较早)
A-1403 Gitee 平台介绍 并入 §2;补实名与私有库名额限制
A-1937 访问 GitHub 的四种方式 §3 重排为"推荐顺序 + 风险",补镜像站不可作生产依赖
A-1850 22 改 443 的报错与命令 §4 实测复现(ssh.github.com:443 + /dev/tcp 验端口);补 ProxyCommand 走 HTTP 代理
A-1376 IDEA 配置 GitHub §6 保留,补 OAuth/Token 两条路径的取舍与故障表
— 旧文各自孤立,没有"多平台共存" 新增 §5(ssh -G 实测输出 + 多 remote 镜像)

9. 自测

  1. Permission denied (publickey) 说明网络通不通?为什么?
  2. Host github 与 Host github.com 两种写法,对 [email protected]:... 的影响有什么不同?
  3. ssh -G 与 ssh -vT 分别解决什么问题?
  4. 用镜像站作为唯一代码来源有什么风险?
  5. git ls-remote 能验证哪三件事?

10. 下一篇

S01-X01 · 工具与库速查:JSON、日志、测试、数据库、AI 编码客户端

基础层的最后一篇是"速查型附录":把旧文里 10 张「待复核」的工具卡(fastjson / Gson / Jackson / Log4j 系 / SLF4J / JUnit / DBeaver / Knife4j / Forest / 其他轮子)压成一张可查的表——每类工具给出"用/不用"判据,并指向后续系列的主讲文章。


本篇属于系列《S01 · 开发环境与工具链》。旧文来源:A-1401/1402/1403/1937/1850/1376;扩展点 E-S01-014。ssh -G、443 可达性为 2026-11-05 实测。

S01-B11 · Git 托管与网络可达性:GitHub / Gitee / Gitcode
https://www.clxhxhhr.top/posts/5165/
作者
clxstart
发布于
2024-12-31
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。