文章

Git 加速:为 SSH 和 HTTPS 配置本地代理

通过配置 SSH ProxyCommand 和 Git HTTP/HTTPS 全局代理,让 git clone 和 git push 在国内网络环境下也能高速访问远程仓库。

Git 加速:为 SSH 和 HTTPS 配置本地代理
  1. 问题背景
  2. SSH 协议配置 SOCKS5 代理
    1. 关键点说明
    2. HTTP 代理的写法
  3. HTTPS 协议配置全局代理
  4. 两种方案的选择与配合
  5. 验证效果
  6. 总结

问题背景

在国内网络环境下,直接通过 git clone git@github.com:... 拉取代码往往速度极慢,甚至频繁超时。很多人已经部署了本地代理工具(如 Clash、V2Ray),但 Git 默认并不会自动走这些代理,需要手动配置。

Git 访问远程仓库主要有两种协议:

  • SSH 协议git@github.com:user/repo.git):默认走 22 端口,不走系统的 HTTP 代理设置
  • HTTPS 协议https://github.com/user/repo.git):走 HTTP/HTTPS 流量,可通过 Git 的 http.proxy 配置

要让两种协议都能利用本地代理加速,需要分别处理。

SSH 协议配置 SOCKS5 代理

SSH 代理的核心思路是在 ~/.ssh/config 中为特定主机添加 ProxyCommand,让 SSH 流量先经过本地 SOCKS5 代理,再转发到目标服务器。

假设本地 SOCKS5 代理端口为 10808(常见于 Clash、V2Ray 等工具),在 ~/.ssh/config 中添加:

1
2
3
4
5
6
Host github.com
    HostName ssh.github.com
    Port 443
    IdentityFile ~/.ssh/id_rsa.github.com
    IdentitiesOnly yes
    ProxyCommand connect -S 127.0.0.1:10808 %h %p

关键点说明

  • HostName ssh.github.com + Port 443:部分网络环境会封锁 22 端口,将 GitHub SSH 入口改为 443 端口可以提高连通性
  • connect -S 127.0.0.1:10808:使用 connect 工具(Git for Windows 自带)通过 SOCKS5 代理建立连接;%h%p 会被替换为实际的目标主机和端口
  • -S:指定 SOCKS5 代理;如果代理是 HTTP 类型,应改为 -H

配置完成后,验证连通性:

1
ssh -vT git@github.com

如果输出中出现 connect -S 127.0.0.1:10808 ssh.github.com 443,并最终显示 Hi xxx! You've successfully authenticated...,说明代理生效。

HTTP 代理的写法

如果本地代理只提供 HTTP 代理(端口假设为 10809),则 ProxyCommand 应改为:

1
2
Host github.com
    ProxyCommand connect -H 127.0.0.1:10809 %h %p

HTTPS 协议配置全局代理

对于使用 HTTPS 地址克隆的仓库,可以直接通过 Git 的全局配置让 HTTP/HTTPS 流量走代理:

1
2
git config --global http.proxy http://127.0.0.1:10809
git config --global https.proxy http://127.0.0.1:10809

这样所有 git clone https://...git fetchgit push 都会自动经过代理。

查看已配置的代理:

1
2
git config --global http.proxy
git config --global https.proxy

如果某个仓库临时不需要代理,可以在该仓库目录下单独取消:

1
2
git config --local --unset http.proxy
git config --local --unset https.proxy

两种方案的选择与配合

场景推荐方案
仓库地址是 git@github.com:...配置 ~/.ssh/config + SOCKS5/HTTP 代理
仓库地址是 https://github.com/...配置 git config --global http.proxy
不确定用哪种地址两种都配置,互为补充

实际操作中,建议同时配置 SSH 代理和 Git HTTPS 代理,这样无论克隆时复制的是 SSH 地址还是 HTTPS 地址,都能获得加速效果。

验证效果

配置完成后,可以从 GitHub 克隆一个中等大小的仓库测试速度:

1
2
3
4
5
# 测试 SSH 协议
git clone git@github.com:torvalds/linux.git --depth 1

# 测试 HTTPS 协议
git clone https://github.com/torvalds/linux.git --depth 1

速度从几 KB/s 提升到几 MB/s 是常见现象。

总结

  • SSH 不走系统代理,必须通过 ~/.ssh/configProxyCommand 显式指定
  • HTTPS 走 Git 自身的代理配置,通过 http.proxyhttps.proxy 控制
  • connect 工具在 Git for Windows 中自带,无需额外安装
  • 将 GitHub SSH 端口改为 443 可以进一步规避部分网络环境的端口封锁

完成以上配置后,日常的 git clonegit fetchgit push 基本都能满速运行。

本文由作者按照 CC BY 4.0 进行授权