当前位置: 首页 > 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.cnnetsun.cn/news/3076410.html

相关文章:

  • 新手买翡翠避坑指南:7个可落地的“硬核”核对标准
  • One API:用一套接口调遍所有大模型
  • 死磕Spring Boot Validation校验
  • 一句话讲透向量数据库:它把“语义相似“变成了可计算的东西
  • 快速替换文本中的上下标
  • 项目包含项目源码、项目文档、数据库脚本、软件工具等资料;
  • 2024年最全Minecraft矿石透视模组指南:Advanced XRay从零配置到高效挖矿
  • key 为出现的数字, value 为该数字出现的次数。遍历⾥⾯所有的数字,如果 hashmap 中存在,那么 value (次数)+1,如果 hashmap 中不存在,那么 value 置为1。
  • .算数操作符
  • AI编程Token成本将与开发者薪资持平,企业如何应对?
  • 报错解决org.springframework.web.method.annotation Failed to convert value of type ‘java.lang.String‘ to
  • ESP32 + 传感器:手把手教你做土壤监测终端
  • 微信小程序:农户手机上的「农场管家」
  • 自动灌溉系统:AI 什么时候浇水,比老农还准?
  • 批量处理远程共享目录中的特定类型文件(如 .hex、.csv 等)。
  • OpenGL学习笔记-05-着色器-数据类型/输入输出/uniform
  • 基于OpenCV与YOLO的实时目标检测系统搭建指南
  • Docker部署PostgreSQL
  • Playwright混沌工程实战:构建AI增强的韧性Web自动化测试体系
  • 【LeetCode】反转字符串
  • 京东开源实时视频视觉语言交互模型:全栈方案解析与落地实践
  • 智能体颠覆安全-360图龙锋如何用蜂群路线打造中国版Mythos
  • Java 26 发布了, 我人麻了。。
  • 玩三角洲要高配?2026年这5款旗舰游戏本让你杀穿新赛季
  • AI模型门控发布机制解析:原理、实践与行业应用
  • 2026全球EMBA客观测评:科学选型与优质项目解析
  • 工程师转型AI:从跑通Demo到收藏实战秘籍,拒绝高数劝退!
  • 微信聊天记录备份终极指南:如何安全保护你的数字记忆
  • UMDF驱动开发入门:二 详解INF文件与设备类选择
  • 软件测试——黑盒测试