实现:
- Codex 安装在远程 Linux 服务器上
- 登录与对话请求全部在服务器端完成
- 可配合 Remote SSH / VS Code 正常访问服务器文件
- 无需 API Key,仅使用 codex sign 登录
核心思路:
通过 SSH RemoteForward 将服务器的网络请求转发到本地代理端口,让服务器“借用”本机梯子出网。
环境说明
本机
远程服务器
- 云服务器(ECS / VPS)
- Ubuntu 20 / 22
- 已安装 Codex,但无法登录
原理说明
服务器无法直接访问 OpenAI 相关域名,导致 Codex 登录失败,而本机代理可以正常访问外网。通过 SSH 反向端口转发的流程如下:
服务器访问 127.0.0.1:17897
↓ SSH 隧道
Mac 访问 127.0.0.1:7897(本地代理)
↓
外网
即:服务器通过 SSH 隧道,将流量转回本地代理端口。
Step 1:确认本地代理端口可用
在 Mac 终端执行:
必须看到类似以下输出,否则说明代理未启动或端口错误:
|
1
|
Connection to 127.0.0.1 port 7897 [tcp/*] succeeded!
|
Step 2:建立 SSH RemoteForward 隧道
在 Mac 执行(请替换 USER 与 SERVER_IP):
|
1
|
ssh -N -R 17897:127.0.0.1:7897 USER@SERVER_IP
|
示例:
|
1
|
ssh -N -R 17897:127.0.0.1:7897 ubuntu@1.2.3.4
|
说明:
- 17897 为服务器端本地端口
- 7897 为本地代理端口
- 注意:隧道建立后不要关闭该终端。
Step 3:服务器端验证隧道
另开一个终端登录服务器:
在服务器执行:
若显示以下内容,说明转发成功:
Step 4:验证服务器是否可通过代理访问外网
在服务器执行:
|
1
|
curl -I -x "http://127.0.0.1:17897" "https://www.google.com"
|
若返回类似以下状态码,说明服务器已经可以借用本地代理访问外网:
Step 5:让 Codex 走代理登录
在服务器终端执行临时代理配置:
|
1
2
|
export http_proxy="[http://127.0.0.1:17897](http://127.0.0.1:17897)"
export https_proxy="[http://127.0.0.1:17897](http://127.0.0.1:17897)"
|
然后登录 Codex:
后续即可正常进行对话:
长期使用方案(推荐 proxy_on / proxy_off)
不建议在服务器端配置永久全局代理,否则一旦 SSH 隧道断开,系统网络会全部卡住。推荐使用快捷命令按需开启。
在服务器编辑 ~/.bashrc:
在文件末尾添加:
|
1
2
3
4
5
6
7
8
9
10
|
proxy_on() {
export http_proxy="[http://127.0.0.1:17897](http://127.0.0.1:17897)"
export https_proxy="[http://127.0.0.1:17897](http://127.0.0.1:17897)"
echo "Proxy enabled"
}
proxy_off() {
unset http_proxy https_proxy
echo "Proxy disabled"
}
|
使其生效:
使用方式:
|
1
2
3
|
proxy_on # 开启代理
codex chat # 愉快使用
proxy_off # 用完关闭代理
|
Mac 端一键脚本(推荐)
为了避免每次都手动输长长的 SSH 命令,可以在 Mac 端配置自动化脚本。
1. 配置 SSH 免密登录
|
1
|
ssh-copy-id -i ~/.ssh/id_ed25519.pub USER@SERVER_IP
|
验证是否成功:
|
1
|
ssh USER@SERVER_IP "echo OK"
|
2. 开启隧道脚本
创建存放脚本的目录及文件:
|
1
2
|
mkdir -p ~/bin
nano ~/bin/codex-tunnel-on
|
写入以下内容(注意替换 USER@SERVER_IP):
|
1
2
3
4
5
6
7
8
9
10
|
#!/usr/bin/env bash
nohup ssh -N \
-o ExitOnForwardFailure=yes \
-o ServerAliveInterval=30 \
-R 17897:127.0.0.1:7897 \
USER@SERVER_IP \
>/dev/null 2>&1 &
echo "Codex tunnel started"
|
赋予执行权限:
|
1
|
chmod +x ~/bin/codex-tunnel-on
|
3. 关闭隧道脚本
创建文件:
|
1
|
nano ~/bin/codex-tunnel-off
|
写入以下内容:
|
1
2
3
|
#!/usr/bin/env bash
pkill -f "ssh.*17897:127.0.0.1:7897"
echo "Codex tunnel stopped"
|
赋予执行权限:
|
1
|
chmod +x ~/bin/codex-tunnel-off
|
日常使用流程
???? 开始工作:
- Mac 端运行隧道脚本:
- 服务器端开启代理并使用:
???? 结束工作:
- 服务器端关闭代理:
- Mac 端关闭隧道:
注意事项
- 不要将本地的 .codex 文件夹直接复制到服务器。
- 不要在本地运行 Codex 再试图操作远程文件。
- SSH 隧道关闭后,如果服务器环境变量未 unset,服务器将无法正常访问外网(这就是为什么推荐使用 proxy_off)。
- 该方案成本极低、结构清晰、无隐私泄漏风险,非常适合长期使用 Remote SSH 工作流的开发者。
|