先说一下笔者遇到的情况:
10.250.4.84:2347);git pull 时,却卡住或超时——因为服务器本身无法直连外网;这正是本文要解决的问题。
因为是通过代理来连接的服务器,所以想当然的认为服务器也可以访问本地机器。实际上本地机器处于 NAT 或防火墙之后,服务器无法主动连接本地机器(比如它 ping 不通本机地址 192.168.2.225)。因此解决方案就是:本地机器主动发起的 SSH 连接,建立一个“反向通道”。具体示意图如下:
服务器 (10.250.4.84)
←─[SSH 隧道]─→
本地电脑 (192.168.2.225:7890)
→ 代理 → 外网 (Git仓库)具体做法就是建立一个 SSH 反向隧道(Reverse Tunnel),在服务器上监听一个端口(如 1080),所有流量经由 SSH 隧道转发到你本地的代理端口。
第一步:确认本地代理(例如http://192.168.2.225:7890)支持局域网访问。不同的代理客户端有不同的设置方法,另外最好临时关闭 Windows 防火墙,排除拦截问题。
第二步:用 PowerShell 建立反向隧道。在 PowerShell 中执行:
ssh -p 2347 -R 1080:192.168.2.225:7890 charlee@10.250.4.84参数说明:
-p 2347:指定服务器的 SSH 端口(标准端口是22)。-R 1080:192.168.2.225:7890:在服务器的 127.0.0.1:1080 建立监听,转发到你本地的代理;💡 如果使用了非默认 SSH 密钥,加上
-i ~/.ssh/id_ed25519。
第三步:在服务器上配置代理。在服务器终端执行:
# 设置环境变量(临时生效)
export http_proxy=http://127.0.0.1:1080
export https_proxy=http://127.0.0.1:1080如果要配置 Git:
git config --global http.proxy http://127.0.0.1:1080
git pull # 应该流畅运行如果要验证隧道是否生效,可以在服务器上 ping 本机地址,成功建立反向隧道后,一般都会成功。