当前位置: 首页 > news >正文

VSCode Remote SSH 中 Codex 连接超时的排查与解决记录

VSCode Remote SSH 中 Codex 连接超时的排查与解决记录

1. 问题现象

本地 Windows 上 Codex 可以正常使用,但通过 VSCode Remote SSH 连接 Orange Pi 后,在远程环境里使用 Codex 会出现:

request timed out

远程机器是:

Orange Pi / Linux ARM64

Codex 配置大致如下:

model_provider = "custom" model = "gpt-5.5" model_reasoning_effort = "high" [model_providers.custom] name = "apikey.quest" base_url = "https://apikey.quest/v1" wire_api = "responses" env_key = "APIKEY_QUEST_API_KEY"

一开始怀疑是config.toml配置问题,后来确认不是核心问题。


2. 核心原因

VSCode Remote SSH 模式下,Codex 插件/远程 CLI 实际使用的是远程服务器 Orange Pi 的网络,不是 Windows 本地电脑的网络。

也就是说:

VSCode 本地窗口 ↓ Remote SSH ↓ Orange Pi 上运行 Codex ↓ Orange Pi 自己访问 API

而 Orange Pi 的网络只能访问部分网站:

curl-I--max-time10https://www.baidu.com

能返回200 OK

但是:

curl-I--max-time10https://www.google.comcurl-I--max-time10https://api.openai.com/v1/models

会超时。

所以 Codex 在远程机器上访问模型 API 时,也会超时。


3. 解决思路

把 Windows 本地的代理端口通过 SSH 反向转发给 Orange Pi。

最终链路变成:

Orange Pi Codex ↓ Orange Pi 127.0.0.1:10808 ↓ SSH RemoteForward ↓ Windows 127.0.0.1:10808 ↓ Windows 本地代理/VPN ↓ apikey.quest / OpenAI API

这样远程 Orange Pi 就可以借用 Windows 本地代理访问外网。


4. 确认 Windows 本地代理端口

Windows 设置里看到本地代理端口是:

127.0.0.1:10808

所以后面统一使用:

10808

如果你的代理软件端口不同,比如7890789710809,需要替换成自己的端口。


5. 配置 SSH RemoteForward

在 Windows PowerShell 打开 SSH 配置:

notepad$env:USERPROFILE\.ssh\config

加入或修改 Orange Pi 的 Host 配置:

Host orangepi HostName 192.168.3.19 User orangepi RemoteForward 10808 127.0.0.1:10808

含义是:

远程 Orange Pi 的 127.0.0.1:10808 转发到 Windows 本地的 127.0.0.1:10808

修改后,需要断开 VSCode Remote SSH,然后重新连接 Orange Pi。


6. 测试代理转发是否成功

重连 VSCode Remote SSH 后,在 Orange Pi 远程终端执行:

curl-I--max-time20-xhttp://127.0.0.1:10808 https://www.google.com

成功时会看到:

HTTP/1.1 200 Connection established HTTP/2 200

再测试 OpenAI:

curl-I--max-time20-xhttp://127.0.0.1:10808 https://api.openai.com/v1/models

成功时会看到:

HTTP/1.1 200 Connection established HTTP/2 401

这里401是正常的,因为这个测试没有传 OpenAI 官方 API Key。重点是它没有 timeout。


7. 测试 apikey.quest 的 Responses API

Codex 使用的是:

wire_api = "responses"

所以它实际请求的是:

https://apikey.quest/v1/responses

一开始直接 curl 时卡住:

POST /v1/responses HTTP/2 We are completely uploaded and fine

后来发现是 HTTP/2 链路容易卡住。改成 HTTP/1.1 并使用 JSON 文件发送请求体后成功。

在 Orange Pi 上执行:

cat>/tmp/responses.json<<'EOF' { "model": "gpt-5.5", "input": "hello" } EOFcurl--http1.1-i--max-time60-xhttp://127.0.0.1:10808 https://apikey.quest/v1/responses\-H"Authorization: Bearer$APIKEY_QUEST_API_KEY"\-H"Content-Type: application/json"\--data-binary @/tmp/responses.json

成功返回:

HTTP/1.1 200 Connection established HTTP/1.1 200 OK

响应里能看到模型返回:

"text":"Hello."

这说明:

API Key 没问题 model = "gpt-5.5" 没问题 apikey.quest /v1/responses 没问题 Orange Pi 走代理也能通

8. 给远程 Orange Pi 设置代理环境变量

为了让 Codex CLI 使用代理,在 Orange Pi 上执行:

nano~/.bashrc

在文件末尾加入:

exportHTTP_PROXY=http://127.0.0.1:10808exportHTTPS_PROXY=http://127.0.0.1:10808exporthttp_proxy=http://127.0.0.1:10808exporthttps_proxy=http://127.0.0.1:10808

然后执行:

source~/.bashrc

验证不带-x的 curl 是否也能走代理:

curl-I--max-time20https://api.openai.com/v1/models

如果能快速返回401,说明代理环境变量生效。


9. 安装远程 Codex CLI

一开始远程执行:

codex

报错:

bash: codex: command not found

说明 Orange Pi 上没有安装 Codex CLI。

安装命令:

curl-fsSLhttps://chatgpt.com/codex/install.sh|sh

安装完成后验证:

whichcodex codex--version

成功输出:

/home/orangepi/.local/bin/codex codex-cli 0.142.4

10. 验证远程 Codex CLI 成功

在 Orange Pi 远程终端执行:

exportHTTP_PROXY=http://127.0.0.1:10808exportHTTPS_PROXY=http://127.0.0.1:10808exporthttp_proxy=http://127.0.0.1:10808exporthttps_proxy=http://127.0.0.1:10808cd/home/orangepi/Documents/orangepi_data_collect codex

进入 Codex 后输入:

hello

成功返回:

Hello.

这说明远程 Codex CLI 已经跑通。


11. VSCode Remote Settings 配置

如果命令行 Codex 能用,但 VSCode 插件还是 timeout,说明 VSCode Remote 插件可能没有继承终端里的代理环境变量。

在已经连接 Orange Pi 的 VSCode 窗口中:

Ctrl + Shift + P

搜索:

Preferences: Open Remote Settings (JSON)

注意要选Remote Settings,不是本地 User Settings。

加入:

{"http.proxy":"http://127.0.0.1:10808","https.proxy":"http://127.0.0.1:10808"}

如果原来已有配置,注意 JSON 逗号格式,例如:

{"editor.fontSize":14,"http.proxy":"http://127.0.0.1:10808","https.proxy":"http://127.0.0.1:10808"}

保存后执行:

Developer: Reload Window

或者:

Remote-SSH: Kill VS Code Server on Host

然后重新连接 Orange Pi。


12. 最终远程 Codex 配置

Orange Pi 上的:

~/.codex/config.toml

建议保持简单:

model_provider = "custom" model = "gpt-5.5" model_reasoning_effort = "high" [model_providers.custom] name = "apikey.quest" base_url = "https://apikey.quest/v1" wire_api = "responses" env_key = "APIKEY_QUEST_API_KEY" [projects."/home/orangepi/code"] trust_level = "trusted" [projects."/home/orangepi/code/cam_cz005"] trust_level = "trusted" [projects."/home/orangepi/Documents/orangepi_data_collect"] trust_level = "trusted"

不要把 Windows 本地的 Codex 配置复制到 Orange Pi,因为里面有很多 Windows 路径,例如:

C:\Users\... C:\Windows\...

这些只能给 Windows 本地 Codex 用。


13. 最终结论

这次问题的根因不是 Codex 配置错误,而是:

VSCode Remote SSH 下,Codex 实际运行在 Orange Pi 上; Orange Pi 自己无法稳定访问 Google/OpenAI/API 中转; 因此 Codex 请求超时。

最终解决办法是:

通过 SSH RemoteForward,把 Windows 本地代理转发给 Orange Pi; 然后让 Orange Pi 的 curl、Codex CLI、VSCode Remote 插件都使用 127.0.0.1:10808 这个代理。

成功标志:

curl 走代理能访问 Google curl 走代理能访问 api.openai.com curl 走代理能访问 apikey.quest /v1/responses 远程 codex 命令能回复 Hello

14. 注意事项

如果 Windows 本地代理/VPN 没开,Orange Pi 仍然可以访问部分普通网站,比如百度,但无法通过这条代理链路访问 Google/OpenAI/API 中转。

快速检测代理是否可用:

curl-I--max-time10-xhttp://127.0.0.1:10808 https://api.openai.com/v1/models

只要快速返回401,说明代理链路正常。

如果 timeout、connection refused 或 proxy error,则检查:

Windows 本地代理是否开启 VSCode Remote SSH 是否重新连接 SSH config 里的 RemoteForward 是否正确 端口 10808 是否和本地代理端口一致

另外,API Key 不要直接粘贴到聊天或公开笔记里,日志中的:

Authorization: Bearer sk-...

需要打码或删除。

http://www.jsqmd.com/news/1099761/

相关文章:

  • 一句指令完成电脑操作!腾讯的AI助手Marvis让我电脑会干活了:改设置、查文件、整理文档
  • 请问微信小程序域名迁移有懂行的吗?有偿咨询
  • ChatGPTPlus和Pro怎么选?普通用户别再乱花钱了
  • SeaweedFS:33000 Star 的分布式文件系统,小文件读写做到了极致
  • Java毕设项目:基于 SpringBoot 的高校心理健康普查管理系统的设计与实现 基于 SpringBoot 的学生心理测评统计分析系统 (源码+文档,讲解、调试运行,定制等)
  • Java计算机毕设之基于 SpringBoot 的二次元潮玩交易商城管理系统的设计与实现 基于 SpringBoot 的游戏周边二手交易流转系统(完整前后端代码+说明文档+LW,调试定制等)
  • SpringDoc OpenAPI 配置
  • ESP32实验教程:三位按键输入译码控制8路输出(替代74HC138逻辑)
  • python: Fail-Fast Pattern
  • AI优化mRNA翻译效率:从密码子优化到深度学习驱动的序列设计
  • AI工具集
  • 【计算机毕业设计案例】基于 SpringBoot 的高校外卖配送调度监控系统的设计与实现 基于 SpringBoot 的校园餐饮消费配送管理系统(程序+文档+讲解+定制)
  • JAVA注解(简单版)
  • 2026-06-30 后端启动异常排查记录
  • Java毕设项目:基于 SpringBoot 的电竞周边用品交易管理系统的设计与实现 基于 SpringBoot 的小众游戏周边购物服务系统 (源码+文档,讲解、调试运行,定制等)
  • 基于FFmpeg的直播视频录制工具StreamCap
  • 【毕业设计】基于 SpringBoot 的高校学生心理预警干预系统的设计与实现 基于 SpringBoot 的大学生心理状态跟踪管理系统(源码+文档+远程调试,全bao定制等)
  • 企业做GEO内容发布,哪些做法容易出风险?
  • CPT Markets:把多语言支持做扎实,注重效率的使用者更容易感受到的框架
  • Vol.57|接新IM渠道还要改代码?现在填几个字段就行
  • 无人机视角航拍违建违章建筑识别数据集labelme格式245张2类别
  • CAD 图纸批量处理:用 OpenClaw 实现图纸格式转换、批量打印、版本号自动标注
  • Spring Cloud分布式事务快速上手(基于Seata AT模式,集成Nacos)--学习版
  • Manim 节奏控制指南 (Rate Functions)
  • Java计算机毕设之基于 SpringBoot 的学生心理咨询预约管理系统的设计与实现 基于 SpringBoot 的高校心理健康信息管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • 按照这个方法真的领到了8元,千问新用户专属220372
  • YOLO-World实战:零样本目标检测,一句话实现开放词汇检测
  • AI 建议用 Redis `SETNX` 防重复提交,为什么锁过期后仍可能创建两条记录
  • CPT Markets:把外汇投教内容建设做到位——标准观察与提示整理
  • 6G网络中大模型技术与多模态感知通信的融合应用