实现:
核心思路:
通过 SSH RemoteForward 将服务器的网络请求转发到本地代理端口,让服务器“借用”本机梯子出网。
服务器无法直接访问 OpenAI 相关域名,导致 Codex 登录失败,而本机代理可以正常访问外网。通过 SSH 反向端口转发的流程如下:
服务器访问 127.0.0.1:17897
↓ SSH 隧道
Mac 访问 127.0.0.1:7897(本地代理)
↓
外网
即:服务器通过 SSH 隧道,将流量转回本地代理端口。
在 Mac 终端执行:
|
1 |
nc -vz 127.0.0.1 7897 |
必须看到类似以下输出,否则说明代理未启动或端口错误:
|
1 |
Connection to 127.0.0.1 port 7897 [tcp/*] succeeded! |
在 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 |
说明:
另开一个终端登录服务器:
|
1 |
ssh USER@SERVER_IP |
在服务器执行:
|
1 |
nc -vz 127.0.0.1 17897 |
若显示以下内容,说明转发成功:
|
1 |
Connection succeeded! |
在服务器执行:
|
1 |
curl -I -x "http://127.0.0.1:17897" "https://www.google.com" |
若返回类似以下状态码,说明服务器已经可以借用本地代理访问外网:
|
1 |
HTTP/2 200 |
在服务器终端执行临时代理配置:
|
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:
|
1 |
codex sign |
后续即可正常进行对话:
|
1 |
codex chat |
不建议在服务器端配置永久全局代理,否则一旦 SSH 隧道断开,系统网络会全部卡住。推荐使用快捷命令按需开启。
在服务器编辑 ~/.bashrc:
|
1 |
nano ~/.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 |
source ~/.bashrc |
使用方式:
|
1 2 3 |
proxy_on # 开启代理 codex chat # 愉快使用 proxy_off # 用完关闭代理 |
为了避免每次都手动输长长的 SSH 命令,可以在 Mac 端配置自动化脚本。
|
1 |
ssh-copy-id -i ~/.ssh/id_ed25519.pub USER@SERVER_IP |
验证是否成功:
|
1 |
ssh USER@SERVER_IP "echo OK" |
创建存放脚本的目录及文件:
|
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 |
创建文件:
|
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 |
|
1 |
codex-tunnel-on |
|
1 2 |
proxy_on codex chat |
|
1 |
proxy_off |
|
1 |
codex-tunnel-off |