为直接在树莓派环境中读取代码、执行构建、分析日志和运行测试,希望在以下两个入口使用 Codex:
- 树莓派上的 Codex CLI
- VS Code Remote SSH 环境中的 Codex 插件
问题在于:
- Windows 可以访问 OpenAI。
- 树莓派所在网络不能直接访问 OpenAI。
- VS Code 虽然可以通过 SSH 连接树莓派,但这不代表树莓派能够访问互联网。
- 需要避免为了测试频繁提交、推送和远程拉取代码。
最终方案是:
树莓派 Codex
↓ HTTP_PROXY
树莓派 127.0.0.1:17890
↓ SSH Reverse Forward
Windows 127.0.0.1:8899
↓ Windows 网络
OpenAI
为什么不能直接转发常见代理端口
首先检查 Windows 是否有代理程序监听:在powershell检查
Get-NetTCPConnection -State Listen |
Where-Object LocalPort -in 7890,7891,7897,1080,10808 |
Select-Object LocalAddress,LocalPort,OwningProcess
没有返回结果,说明这些常见端口没有代理程序监听。
再检查 Windows 系统代理:
Get-ItemProperty `
"HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" |
Select-Object ProxyEnable,ProxyServer,AutoConfigURL
结果显示:
ProxyEnable = 0
再检查常见代理进程:
Get-Process |
Where-Object ProcessName -Match "clash|mihomo|v2ray|xray|sing|nekoray|shadowsocks"
仍然没有结果。
但是 Windows 直接访问 OpenAI:
curl.exe -I --max-time 15 https://api.openai.com
返回了 HTTP 响应。
这说明:
- Windows 能直接访问互联网。
- Windows 没有本地代理服务。
- SSH 即使转发 7890 等端口也没有意义,因为这些端口后面没有程序接收请求。
因此,需要先在 Windows 创建一个 HTTP CONNECT 代理。
1. 在 Windows 创建本地代理
本次使用第三方开源项目 proxy.py。
项目地址:
- proxy.py GitHub
- proxy.py PyPI
再打开一个shell创建独立 Python 环境:
py -m venv "$env:LOCALAPPDATA\codex-forward-proxy"
安装代理:
& "$env:LOCALAPPDATA\codex-forward-proxy\Scripts\python.exe" `
-m pip install --upgrade pip proxy.py
新开一个powershell启动代理:(此窗口保持打开)
& "$env:LOCALAPPDATA\codex-forward-proxy\Scripts\python.exe" `
-m proxy `
--hostname 127.0.0.1 `
--port 8899
这里必须绑定:
127.0.0.1
不应绑定:
0.0.0.0
绑定 127.0.0.1 表示只有 Windows 本机能够访问该代理,不会直接开放给整个局域网。
再开一个powershell验证代理:
curl.exe `
-x http://127.0.0.1:8899 `
-I `
--max-time 15 `
https://api.openai.com
2. 通过 SSH 反向转发代理
Windows 本地代理监听:
127.0.0.1:8899
现在需要让树莓派通过自己的本机端口访问它。
新开powershell在 Windows 执行:
ssh -N -T `
-o ExitOnForwardFailure=yes `
-R 127.0.0.1:17890:127.0.0.1:8899 `
<PI_USER>@<PI_IP>
参数含义:
- -N:不执行远程 Shell 命令。
- -T:不分配交互终端。
- -R:建立反向端口转发。
- 树莓派的 127.0.0.1:17890 被转发到 Windows 的 127.0.0.1:8899。
- ExitOnForwardFailure=yes:端口转发失败时直接退出。
建立成功后,这个窗口没有输出并一直停在那里是正常现象。
在树莓派验证代理链路
在树莓派终端设置代理变量:
export HTTP_PROXY=http://127.0.0.1:17890
export HTTPS_PROXY=http://127.0.0.1:17890
export http_proxy="$HTTP_PROXY"
export https_proxy="$HTTPS_PROXY"
export NO_PROXY=localhost,127.0.0.1
export no_proxy="$NO_PROXY"
测试:
curl -I --max-time 15 https://api.openai.com
返回:
HTTP/1.1 200 Connection established
HTTP/2 421
其中:
HTTP/1.1 200 Connection established
说明 HTTP CONNECT 隧道建立成功,树莓派已经通过 Windows 访问到了 OpenAI。
后面的 421 不代表网络失败。当前请求是对 API 根路径发送 HEAD 请求,它不是一个正常的 API 调用,但已经证明:
- DNS 可用。
- SSH 隧道可用。
- Windows 代理可用。
- TLS 连接可用。
- OpenAI 边缘服务器可达。
在 ARM64 树莓派安装 Node.js
树莓派架构检查:
uname -m
返回:
aarch64
系统没有 Node.js:
Command 'node' not found
没有直接执行:
sudo apt install nodejs npm
原因是部分 Ubuntu 版本的软件源中 Node.js 版本可能较旧。
本次安装官方 ARM64 Node.js 24 LTS 二进制包:
cd /tmp
curl -fLO https://nodejs.org/dist/v24.18.0/node-v24.18.0-linux-arm64.tar.xz
curl -fLO https://nodejs.org/dist/v24.18.0/SHASUMS256.txt
校验:
grep " node-v24.18.0-linux-arm64.tar.xz$" SHASUMS256.txt |
sha256sum -c -
成功结果:
node-v24.18.0-linux-arm64.tar.xz: OK
安装到当前用户目录:
mkdir -p "$HOME/.local"
tar -xJf /tmp/node-v24.18.0-linux-arm64.tar.xz \
-C "$HOME/.local"
配置 PATH:
echo 'export PATH="$HOME/.local/node-v24.18.0-linux-arm64/bin:$PATH"' \
>> "$HOME/.bashrc"
export PATH="$HOME/.local/node-v24.18.0-linux-arm64/bin:$PATH"
验证:
node --version
npm --version
本次结果:
v24.18.0
11.16.0
该安装方式不使用 sudo,不会修改系统级 Node.js,也不会影响其他用户。
Node.js 版本信息可参考:Node.js Releases
---
3. 安装和登录 Codex CLI
配置 npm 用户级安装目录:
npm config set prefix "$HOME/.local"
echo 'export PATH="$HOME/.local/bin:$PATH"' >> "$HOME/.bashrc"
export PATH="$HOME/.local/bin:$PATH"
验证 npm 网络:
npm ping
安装 Codex CLI:
npm install --global @openai/codex
验证:
codex --version
command -v codex
树莓派属于远程无浏览器环境,因此使用设备码登录:
codex login --device-auth
终端会显示网址和验证码,在 Windows 浏览器中打开网址并完成授权即可。
检查登录状态:
codex login status
OpenAI 官方安装说明:OpenAI Codex CLI
4. VS Code Remote SSH 中使用 Codex 插件
VS Code 已经通过 Remote SSH 连接树莓派。
需要确认 Codex 插件显示为:
已安装在 SSH: <HOST_ALIAS>
如果插件只安装在 Windows 本地,它不一定运行在树莓派工作区。
远程插件进程不一定继承终端中手动执行的 export,因此在树莓派创建:
nano "$HOME/.codex/.env"
写入:
HTTP_PROXY=http://127.0.0.1:17890
HTTPS_PROXY=http://127.0.0.1:17890
http_proxy=http://127.0.0.1:17890
https_proxy=http://127.0.0.1:17890
NO_PROXY=localhost,127.0.0.1
no_proxy=localhost,127.0.0.1
设置权限:
chmod 600 "$HOME/.codex/.env"
然后在 VS Code 中运行:
Developer: Reload Window
插件可以:
- 读取和修改远程仓库代码。
- 执行构建和测试命令。
- 获取其执行命令的标准输出和错误输出。
- 查询 ROS 2 topic。
- 读取 systemd journal 和日志文件。
- 根据测试结果继续定位问题。
但它通常不能直接读取另一个 VS Code 终端标签页或 MobaXterm 窗口的历史屏幕内容。
5. 简化日常操作
最初每次需要运行:
1. Windows 本地代理。
2. Windows SSH 反向隧道。
3. VS Code Remote SSH。
4. 树莓派代理变量。
5. Codex。
为了简化,将反向转发写入 Windows SSH 配置:
C:\Users\<WINDOWS_USER>\.ssh\config
配置:
Host <HOST_ALIAS>
HostName <PI_IP>
User <PI_USER>
RemoteForward 127.0.0.1:17890 127.0.0.1:8899
ExitOnForwardFailure yes
ServerAliveInterval 30
ServerAliveCountMax 3
之后,VS Code 连接 <HOST_ALIAS> 时,会自动建立反向隧道。
原来的手动命令不再需要:
ssh -N -T -R ...
但需要注意:
RemoteForward 只负责建立隧道,不会自动启动 Windows 的代理程序。
---
12. 创建 Windows 一键代理脚本
在桌面创建:
启动Codex代理.cmd
内容:
@echo off
if not exist "%LOCALAPPDATA%\codex-forward-proxy\Scripts\python.exe" (
echo Codex proxy Python environment not found.
echo Path: %LOCALAPPDATA%\codex-forward-proxy
pause
exit /b 1
)
start "Codex Proxy" /min "%LOCALAPPDATA%\codex-forward-proxy\Scripts\python.exe" -m proxy --hostname 127.0.0.1 --port 8899
.cmd 是普通文本文件,只是扩展名为 .cmd,不受 PowerShell Execution Policy 限制。
保存时需要选择:
保存类型:所有文件
文件名:启动Codex代理.cmd
不能保存成:
启动Codex代理.cmd.txt
如果希望登录 Windows 后自动启动代理,可以按 Win+R,输入:
shell:startup
将这个脚本的快捷方式放入启动目录。
---
13. 最终日常使用流程
完成一次性配置后,日常操作缩短为:
没有配置代理开机启动
1. 双击 启动Codex代理.cmd。
2. 打开 VS Code。
3. 连接 <HOST_ALIAS>。
4. 打开 Codex 插件。
已配置代理开机启动
1. 打开 VS Code。
2. 连接 <HOST_ALIAS>。
3. 打开 Codex 插件。
VS Code 连接时自动建立 SSH 隧道,关闭 VS Code 后隧道自动释放。
Node.js、Codex 和登录凭据都保存在树莓派上,不需要重复安装。
14. 常见故障
14.1 树莓派无法连接 127.0.0.1:17890
可能原因:
- VS Code Remote SSH 尚未连接。
- SSH 配置中的 RemoteForward 未生效。
- 手动 SSH 隧道已经断开。
- 树莓派的 17890 被其他进程占用。
检查:
ss -lnt | grep 17890
14.2 隧道存在,但仍然不能联网
检查 Windows 的 8899:
Get-NetTCPConnection -State Listen |
Where-Object LocalPort -eq 8899
没有输出说明 Windows 代理没有启动。
14.3 出现 remote port forwarding failed
原因通常是旧的手动 ssh -R 窗口仍然运行,占用了树莓派的 17890。
在旧窗口按:
Ctrl+C
然后重新连接 VS Code。
14.4 CLI 可用,VS Code 插件不可用
检查:
1. 插件是否安装在远程 SSH 环境。
2. ~/.codex/.env 是否存在。
3. Windows 代理是否运行。
4. SSH 隧道是否建立。
5. 是否执行了 Developer: Reload Window。
14.5 codex: command not found
执行:
source "$HOME/.bashrc"
command -v codex
---
15. 安全注意事项
这套方案实现了远程 Agent 能力,也扩大了工具能够执行操作的范围。
需要遵守以下原则:
- Windows 代理只监听 127.0.0.1。
- 树莓派反向端口只监听 127.0.0.1。
- 不公开真实内网 IP、用户名和 SSH 指纹。
- 不提交 ~/.codex 和认证文件。
- 不使用 --yolo 进行真机联调。
- 构建、单元测试和日志分析可以自动化。
- 重启 ROS 服务、连接 MCU 和打开 SPI 建议保留审批。
- 下发轴目标、回零、使能电机和机械臂运动必须人工确认。
- 不要让 Agent 自动绕过限位、急停或安全保护。
- proxy.py 是第三方开源代理,不是 OpenAI 官方代理组件。
---
16. 总结
这次问题的核心并不是“如何安装 Codex”,而是需要同时解决四个层次:
Codex 安装
+
ARM64 Node.js 环境
+
树莓派无公网访问
+
VS Code Remote SSH 自动转发
最终通过以下组合打通:
Windows HTTP CONNECT 代理
+
SSH RemoteForward
+
树莓派用户级 Node.js
+
Codex CLI 设备码登录
+
VS Code 远程 Codex 插件
初次部署步骤较多,但完成持久化配置后,日常使用可以简化为:
启动代理 → VS Code 连接树莓派 → 使用 Codex
如果代理配置为 Windows 登录时自动启动,则最终只需要:
打开 VS Code → 连接树莓派 → 使用 Codex
|