通过 VS Code Remote SSH 在服务器上开发时,本地 Codex 可以正常使用,远程插件却出现登录失败、模型列表加载超时等问题。本次通过复用登录凭据和 SSH 代理转发,成功让远程插件识别账户并进入使用界面。
1. 准备 SSH 连接
在本地 SSH 配置文件(Windows 通常为 %USERPROFILE%\.ssh\config)中配置服务器:
sshconfig
Host my-server
HostName your-server.example.com
User your-user
Port 33022
后续统一使用 my-server,避免手动输入 IP、端口时出错。
2. 复制本地 Codex 登录凭据
本地 Codex 已登录,且存在 %USERPROFILE%\.codex\auth.json 时,可以将凭据复制到可信任的服务器。这也是 Codex 官方支持的远程认证方式。
在本地 Windows CMD 中执行:
cmd
ssh my-server "mkdir -p ~/.codex"
scp "%USERPROFILE%\.codex\auth.json" my-server:~/.codex/auth.json
ssh my-server "chmod 600 ~/.codex/auth.json"
复制会覆盖服务器上的同名文件。auth.json 包含登录令牌,不要公开或提交到 Git。复制凭据只处理认证,服务器仍需能够访问相关服务,且服务地区支持要求仍然适用。
3. 配置 SSH 自动代理转发
本例本地 HTTP 代理地址为 127.0.0.1:6450。将 SSH 配置补充为:
sshconfig
Host my-server
HostName your-server.example.com
User your-user
Port 33022
RemoteForward 127.0.0.1:17890 127.0.0.1:6450
ServerAliveInterval 30
ServerAliveCountMax 3
ExitOnForwardFailure yes
连接后,请求路径为:
text
远程 Codex → 服务器 127.0.0.1:17890 → SSH 隧道 → 本地代理 127.0.0.1:6450
把 6450 换成自己的 HTTP 或 Mixed 代理端口。服务器端仅监听回环地址,无需向公网开放代理端口。
4. 为远程进程设置代理
在服务器的 ~/.bashrc 最开头 加入以下内容,放在可能提前执行的 return 之前:
bash
export HTTP_PROXY=http://127.0.0.1:17890
export HTTPS_PROXY=http://127.0.0.1:17890
export http_proxy=http://127.0.0.1:17890
export https_proxy=http://127.0.0.1:17890
仅在终端执行 export,不会改变已启动的插件进程。因此,保存工作后,在 VS Code 中按 Ctrl+Shift+P,执行:
text
Remote-SSH: Kill VS Code Server on Host...
选择对应服务器,然后重新连接。如果之前运行过独立的 SSH 转发命令,先停止旧隧道,避免端口冲突。
5. 验证配置
在重新连接后的远程终端执行:
bash
echo "$HTTPS_PROXY"
预期输出:
text
http://127.0.0.1:17890
测试代理连接:
bash
curl -I --proxy http://127.0.0.1:17890 --connect-timeout 10 --max-time 30 https://chatgpt.com
若先出现 200 Connection established,随后返回带有 cf-mitigated: challenge 的 403,说明代理已建立连接,但网页触发了 Cloudflare 验证;不能单凭这一响应判断 Codex 是否可用。
最后打开 Codex,发送消息测试。本次插件日志出现以下记录,确认账户已成功识别:
text
authenticatedAccountPresent=true
authMethod=chatgpt
result=succeeded
日常使用
配置完成后,使用 VS Code 连接 my-server 就会自动建立转发,不需要额外打开 CMD 隧道窗口。本地代理软件需保持运行,端口与配置一致。
服务器中的代理变量依赖 SSH 隧道。连接断开后,使用这些变量的程序可能无法联网;不再使用此方案时,应移除或注释对应设置。