在日常开发过程中,经常会遇到这样的情况:
本地电脑网络环境正常,但远程服务器由于网络出口限制、访问策略或者环境配置原因,无法正常访问部分外部软件仓库,导致 Git、pip、conda 等工具下载依赖失败。
如果服务器不方便单独配置网络出口,可以利用 SSH 自带的端口转发功能,将本地已有的 HTTP 代理能力临时提供给远程服务器使用。
该方法具有以下特点:
- 不需要修改服务器网络配置;
- 不需要安装额外软件;
- 基于 SSH 加密连接;
- 仅当前 SSH 会话有效,关闭连接后自动失效。
一、方案原理
整体流程如下:
远程服务器 | | HTTP请求 | 127.0.0.1:7890 | | SSH隧道 | 本地电脑 | | HTTP代理 | 网络出口通过 SSH 反向端口转发,将服务器访问的代理请求转发到本地电脑,再由本地代理服务完成网络访问。
二、建立 SSH 反向端口转发
首先确认本地开发环境中的 HTTP 代理监听端口。
例如:
127.0.0.1:7890
然后在本地电脑终端执行:
ssh -R 7890:127.0.0.1:7890 root@服务器IP
三、服务器配置环境变量
登录服务器后:
export http_proxy="http://127.0.0.1:7890"
export https_proxy="http://127.0.0.1:7890"
此配置仅当前 Shell 会话有效。
如果关闭 SSH:
SSH连接断开
↓
隧道关闭
↓
代理转发失效
重新连接时需要再次建立。
四、验证
验证隧道连通性 不要急着下载,先用底层命令测一下网线通不通:
curl -I https://repo.anaconda.com
成功标志: 如果返回了 HTTP/1.1 200 OK 或 HTTP/2 200,说明流量已经成功穿透了机房防火墙,跑到了你的本地电脑上!
失败标志: 如果卡住不动,请检查你本地电脑的代理软件是否开启了“允许局域网连接 (Allow LAN)”功能。
五、适用场景
- 远程 GPU 服务器环境配置;
- Docker 容器依赖安装;
- Python 包下载;
- 开发环境快速部署;
- 临时网络调试。