当Cursor通过SSH连接远程服务器时,如果Codex后端运行在服务器上,会出现服务器无法访问OpenAI的现象。因此可以通过SSH反向端口转发,让远程Codex使用本机代理联网。
本机以Windows 本机、Linux 远程服务器、7890端口为例。
连接原理
远程codex → 服务器 127.0.0.1:<服务器转发端口> → SSH 反向端口转发 → 本机 127.0.0.1:<本机代理端口> → 本机 VPN → OpenAI/ChatGPT本机 HTTP 代理支持 HTTPS CONNECT,可以通过本机网络建立到 OpenAI 的连接。SSH 的-R参数将服务器监听端口转发到本机代理端口,远程Codex读取代理变量后沿着路径发送请求。如图所示:
两处127.0.0.1分别代表服务器自身和本机自身。箭头表示请求方向,响应按照原路径返回;SSH隧道由本机主动连接服务器建立。
准备条件
开始前,需要确认:
- 本机已具备访问 OpenAI 的网络条件。
- SSH 服务允许反向端口转发,服务器的
7890端口可用。 - 本机已配置
<SSH连接别名>,其中包含服务器地址、登录用户名和 SSH 端口。 - 已准备远程配置脚本,以及本机代理管理脚本和配套的
codex-vpn-proxy.cjs文件。
使用本文原始脚本时,需要将Manage-CodexProxy.ps1中的 $nodeRuntime 修改为本机实际的 Node.js 可执行文件路径。本机两个代理文件应放在同一目录。
以下命令中的占位符需要替换为实际值,并去掉< >。
首次配置:设置远程代理环境
在本机PowerShell中上传配置脚本:
scp "<本机脚本目录>\configure-cursor-remote-proxy.sh" <SSH连接别名>:~/configure-cursor-remote-proxy.sh该命令将脚本复制到服务器当前登录用户的家目录,只上传文件,不执行脚本。
随后,使用同一个账户登录服务器,再服务器终端执行:
bash ~/configure-cursor-remote-proxy.sh脚本将代理环境变量写入该用户的启动配置,代理地址为:http://127.0.0.1:7890。完成后重启Cursor远程服务,使得Codex后端有机会读取新环境,需要确认代理变量确实被后端进程继承;仅在终端看到变量,不足以证明插件生效。
该部分只有在首次配置时执行。
日常使用:启动联网通道
首先连接本机VPN,访问OpenAI/Codex。
本机powershell执行启动代理:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "<本机脚本目录>\Manage-CodexProxy.ps1" -Action Start本机powershell中建立反向端口转发:
ssh -N -o ExitOnForwardFailure=yes -o ServerAliveInterval=30 -o ServerAliveCountMax=3 -R 127.0.0.1:7890:127.0.0.1:7890 <SSH连接别名>其中:
- 前一个127.0.0.1:7890是服务器监听地址
- 后一个127.0.0.1:7890是本机代理地址
- -N 表示建立转发,不执行远程命令
验证连接
在服务器终端执行:
curl --proxy http://127.0.0.1:7890 \ --connect-timeout 10 --max-time 20 \ -sS -o /dev/null \ -w 'CONNECT %{http_connect}, HTTP %{http_code}\n' \ https://api.openai.com/v1/models如果得到:CONNECT 200, HTTP 401,说明代理通道已建立,并收到OpenAI的响应。401是未提供认证信息导致的,可以用于证明网络链路可达,但不能证明 Codex 登录或会话已经成功。
如果提示Connection refused,检查本机代理是否启动、SSH 转发是否仍在运行,以及两端端口是否一致。电脑重启或连接断开后,需要重新启动相应服务。仅重新打开 Cursor 时,如果 VPN、本机代理和 SSH 转发仍在运行,通常可以直接使用。需要更换端口时,应同步修改服务器代理环境变量、本机代理监听端口和 SSH 转发参数。该方案只转发网络连接,不会同步本机与服务器的项目文件。