1. 背景
公司的云服务资源都是在上海,但在上海机器上拉github代码,不稳定,需要翻墙
因此尝试在上海ECS机器创建代理,通过1台香港的机器做跳板,,在上海机器执行git clone github相关资源时,可以通过香港机器拉取资源,从而实现一个简易的VPN
因为我要限定仅git clone github时走代理,因此在配置时候是指定了github的域名,如果需要全部走代理,其实原理是一样,配置一个全局的代理即可。
2. 准备阶段
上海 ECS:需联网,能访问香港 ECS 的 22 端口。
香港 ECS(代理服务器):已开启 SSH 服务(默认 22 端口),知道登录用户名(如root)和公网 IP(如123.456.789.0),以及登录密码
3. 搭建步骤
在上海ECS生成SSH秘钥对(用于免密登录)
登录上海 ECS,执行以下命令生成无密码密钥对:
ssh-keygen -t rsa -b 4096 -f ~/.ssh/hk_ecs_key -N ""
一路回车,无需输入密码,生成两个文件:
- 私钥:
~/.ssh/hk_ecs_key - 公钥:
~/.ssh/hk_ecs_key.pub)
将生成的公钥上传到香港ECS
-
手动复制公钥内容(在上海 ECS 执行)
cat ~/.ssh/hk_ecs_key.pub
复制输出的完整公钥字符串(类似 ssh-rsa AAAAB3NzaC1yc2E...)
-
登录香港ECS并添加公钥(在香港ECS执行)
在香港ECS执行,创建.ssh目录(若不存在)
mkdir -p ~/.ssh && chmod 700 ~/.ssh
编辑授权文件,粘贴复制的公钥
vim ~/.ssh/authorized_keys
-
授权文件权限(在香港ECS执行)
chmod 600 ~/.ssh/authorized_keys
-
验证免密登录(在上海ECS执行)
ssh -i ~/.ssh/hk_ecs_key root@123.456.789.0
建立代理通道(上海 ECS)
-
启动 SOCKS5 隧道(本地监听 7890 端口,后台运行)
ssh -i ~/.ssh/hk_ecs_key -fN -D 127.0.0.1:7890 root@123.456.789.0
-
验证隧道是否启动
pgrep -f "ssh -i ~/.ssh/hk_ecs_key -fN -D 127.0.0.1:7890 root@123.456.789.0"
配置SSH代理规则(上海 ECS)
-
创建 / 编辑 SSH 配置文件
vim ~/.ssh/config
-
添加以下内容(仅对 GitHub 的 SSH 连接生效)
Host github.com ProxyCommand nc -X 5 -x 127.0.0.1:7890 %h %p # 通过本地7890隧道转发 ServerAliveInterval 10 # 保持连接活跃 StrictHostKeyChecking no # 自动信任GitHub主机
-
修复配置文件权限
chmod 600 ~/.ssh/config
-
验证代理是否生效
ssh -vT git@github.com 2>&1 | grep "via proxy"
- 若输出含
Authenticated to github.com (via proxy),说明代理生效。
- 尝试克隆一个Github仓库验证,能征程克隆既完成验证
配置Http的代理规则(上海ECS)
-
配置Git代理
仅针对Git的地址
git config --global http.github.com.proxy socks5://127.0.0.1:7890 git config --global https.github.com.proxy socks5://127.0.0.1:7890
全局代理,针对所有http的请求
git config --global http.proxy socks5://127.0.0.1:7890 git config --global https.proxy socks5://127.0.0.1:7890
如果想重新设置,可以取消代理
取消全局代理
git config --global --unset http.proxy git config --global --unset https.proxy
取消 GitHub 专用代理
git config --global --unset http.github.com.proxy git config --global --unset https.github.com.proxy
-
查看是否配置正确
git config --global --list | grep proxy
若输出类似 http.https://github.com.proxy=socks5://127.0.0.1:7890,说明配置已生效。
-
使用
curl配合代理测试 GitHub 连接,模拟 Git 的 HTTP 请求curl -x socks5://127.0.0.1:7890 github.com -v