反向代理使用归纳

首先打开控制面板,查看到代理的端口,后续用得到

Linux 服务器临时代理速查(SSH 反向隧道)

适用场景:Windows 本机有可用的 HTTP 代理,使用 SSH 连接远程 Linux 服务器,希望让服务器当前终端临时通过 Windows 代理联网(例如访问 GitHub、Hugging Face 或更新 Codex),不修改服务器全局配置。

这里准确的技术名称是 SSH 反向端口转发(reverse SSH port forwarding),不是网站的 Nginx 反向代理。

0. 我的连接参数

项目 当前配置
服务器地址 10.20.43.188
SSH 端口 22
SSH 用户 shuqiang
Windows 本机 HTTP 代理 127.0.0.1:7897
服务器临时代理地址 http://127.0.0.1:7897
SSH 配置 Windows 的 C:\.ssh\config

SSH 配置示例(按实际密钥文件路径为准):

Host 10.20.43.188
  HostName 10.20.43.188
  Port 22
  User shuqiang
  IdentityFile C:\Users\Lenovo\.ssh\id_sha

注意:上面的 IdentityFile 路径来自已有配置记录,文件名 id_sha 可能不完整;如果你现有 SSH 连接正常,无需更改。先确保 Windows 代理软件已开启,并确认 HTTP 代理端口是 7897(代理软件的 SOCKS 端口不一定是 HTTP 端口)。

1. Windows PowerShell:建立 SSH 反向隧道

打开一个独立的 Windows PowerShell 窗口,执行:

ssh -N -o ExitOnForwardFailure=yes -R 127.0.0.1:7890:127.0.0.1:7890 10.20.43.188

说明:

  • -R 127.0.0.1:7897:127.0.0.1:7897:将服务器的本地回环端口 7897 转发到 Windows 本机的 127.0.0.1:7897。

  • -N:只保持 SSH 隧道,不启动远程 Shell。

  • ExitOnForwardFailure=yes:端口监听建立失败时直接报错并退出。

  • PowerShell 没有输出并保持运行通常是正常现象;使用期间不要关闭窗口。

    Linux 服务器 localhost:7897
    │
    ▼
    SSH 反向隧道
    │
    ▼
    Windows 本机 localhost:7897
    │
    ▼
    Windows 代理软件
    │
    ▼
    互联网

2. Linux 服务器终端:临时启用代理

在 VS Code Remote-SSH 的远程终端执行:

export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890

这些环境变量只影响该终端及它启动的子进程,不会自动影响服务器其他用户或已经运行的程序,也不会写入 ~/.bashrc。

3. 快速检测

检查服务器端口是否在监听

ss -lnt | grep ':7897'

正常情况下能看到 127.0.0.1:7897 的 LISTEN 记录。

检查当前终端代理环境变量

printf '%s\n' "$http_proxy" "$https_proxy"

通过代理测试联网

curl -x http://127.0.0.1:7897 -I --connect-timeout 10 https://huggingface.co
curl -x http://127.0.0.1:7897 -I --connect-timeout 10 https://github.com

使用 -x 可以明确要求 curl 走该代理,不依赖环境变量。对于 HTTPS,HTTP/1.1 200 Connection established 表示代理已建立 CONNECT 隧道;还要继续查看后续目标网站的 HTTP 响应,才能确认访问成功。

可选:检查公网出口(可能受到代理规则影响):

curl -x http://127.0.0.1:7897 https://ipinfo.io/ip

4. 完成后关闭(不留全局设置)

在 Linux 当前终端取消环境变量:

unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY all_proxy ALL_PROXY

检查:

env | grep -i proxy

如果仍有输出,请确认它们是否来自其他配置;新建终端也通常不会继承本次临时 export 设置。

最后返回 Windows PowerShell 隧道窗口,按 Ctrl + C 终止 SSH 进程,释放远程端口。

5. 常见故障速查

现象 排查方式
remote port forwarding failed for listen port 7897 服务器上的 7897 可能已被占用;执行 `ss -lnt
SSH 连接失败/超时 先确认 ssh 10.20.43.188 能正常连接,且服务器端口、VPN/校园网络可达。
curl: (7) Failed to connect to 127.0.0.1 port 7897 检查 PowerShell 隧道是否仍运行,以及服务器端口是否监听。
端口已监听,但网站访问失败 确认 Windows 代理软件已启动且提供 HTTP 代理服务;Windows 本机可先测试 curl.exe -x http://127.0.0.1:7897 -I https://github.com。
SSH 提示不允许转发 服务器端可能禁用了 TCP 转发;需要管理员检查 AllowTcpForwarding 等策略。
只在部分终端/程序中生效 export 的作用域仅限当前 Shell 和子进程;在实际运行程序的终端重新设置。
更新 Codex 时提示令牌已撤销 这是身份验证问题,不是代理问题;可执行 codex logout、codex login 重新登录。

如果服务器端 7897 被占用

Windows PowerShell 改用服务器端 17897(Windows 代理仍使用 7897):

ssh -N -o ExitOnForwardFailure=yes -R 127.0.0.1:17897:127.0.0.1:7897 10.20.43.188

随后 Linux 当前终端改为:

export http_proxy=http://127.0.0.1:17897
export https_proxy=http://127.0.0.1:17897
export HTTP_PROXY=http://127.0.0.1:17897
export HTTPS_PROXY=http://127.0.0.1:17897

6. 两分钟操作清单

  1. Windows:开启代理软件,确认 HTTP 代理端口 7897。
  2. Windows PowerShell:执行 ssh -N -o ExitOnForwardFailure=yes -R 127.0.0.1:7897:127.0.0.1:7897 10.20.43.188,保持窗口打开。
  3. Linux:执行 4 行 export 设置代理。
  4. Linux:执行 curl -x http://127.0.0.1:7897 -I https://github.com 验证。
  5. 使用结束:Linux 执行 unset ...,Windows 隧道窗口按 Ctrl + C。

安全提示: 以上转发绑定的是服务器的 127.0.0.1,不是 0.0.0.0;避免将代理端口意外开放到整个校园网/公网。不需要 sudo,也不建议将临时代理凭据或敏感 Token 写入脚本。