用 FRP 打通云服务器与本地 Ubuntu,让 Codex 远程调试本地硬件
也就是说Codex 可以方便地访问云服务器上的项目代码Petoi 机器狗和 STM32H747I-DISCO 却通过 USB 连接在本地 Ubuntu 上本地 Ubuntu 没有公网 IP云服务器无法直接 SSH 到它。如果不解决这个问题调试流程就会变成下面这样Codex 给出命令我复制命令粘贴到本地 Ubuntu 执行复制命令输出粘贴回 Codex 分析Codex 给出下一步这个流程非常痛苦。对于普通软件项目这样手动来回复制几次也许还能忍。但对于硬件调试来说情况完全不同。硬件调试往往需要频繁执行命令、观察输出、调整脚本、重新烧录、读取串口或 OpenOCD 状态。如果每一步都要手动复制粘贴效率会非常低也很容易出错。后来我通过 FRP 打通了云服务器与本地 Ubuntu 之间的反向 SSH 通道使 Codex 可以通过云服务器直接登录到本地 Ubuntu从而直接调试连接在本地 Ubuntu 上的硬件设备。这篇文章记录一下这个过程。问题背景我的实际开发环境大致如下Windows PC 可以通过 Codex / SSH 访问云服务器云服务器有公网 IP本地 Ubuntu 在局域网内没有公网 IPPetoi 机器狗和 STM32H747I-DISCO 通过 USB 连接在本地 Ubuntu 上。其中Windows PC 可以访问云服务器云服务器也有公网 IP。但是本地 Ubuntu 位于局域网中没有公网 IP。云服务器不能直接 SSH 到本地 Ubuntu。这就导致 Codex 虽然可以在云服务器上帮我分析代码、构建固件、生成命令但无法直接操作连接在本地 Ubuntu 上的硬件。而硬件调试又恰恰需要直接访问本地 Ubuntu例如lsusb ls /dev/ttyACM* openocd ... arduino-cli ... python scripts/xxx.py如果 Codex 无法直接执行这些命令整个调试体验就会退化成“人工搬运命令和输出”。为什么选择 FRP为了解决这个问题我需要一种方式让云服务器能够访问本地 Ubuntu。常见方案有几种给本地 Ubuntu 配置公网 IP在路由器上做端口映射使用 Tailscale / ZeroTier 这类组网工具使用 FRP 做反向隧道。我的场景下FRP 是一个很合适的选择。原因是云服务器有公网 IP可以作为 FRP server本地 Ubuntu 虽然没有公网 IP但可以主动连接云服务器一旦本地 Ubuntu 主动连上云服务器就可以把本地 SSH 端口反向暴露到云服务器Codex 已经可以访问云服务器因此也就间接获得了访问本地 Ubuntu 的能力。最终效果是Codex 仍然只操作云服务器但云服务器上的127.0.0.1:REMOTE_SSH_PORT会通过 FRP 转发到本地 Ubuntu 的 SSH 服务。从 Codex 的角度看它只需要在云服务器上执行ssh -p REMOTE_SSH_PORT ubuntu127.0.0.1就能登录到本地 Ubuntu。整体架构整个链路可以画成这样SSH访问 127.0.0.1:REMOTE_SSH_PORT主动连接云服务器转发到 127.0.0.1:LOCAL_SSH_PORTUSB / 串口 / OpenOCDWindows / Codex云服务器frpsfrpc本地 Ubuntu SSHPetoi 机器狗 / STM32H747I-DISCO其中frps运行在云服务器frpc运行在本地 Ubuntu本地 Ubuntu 主动连接云服务器云服务器监听一个本地端口例如REMOTE_SSH_PORT访问云服务器的127.0.0.1:REMOTE_SSH_PORT实际会被转发到本地 Ubuntu 的 SSH 服务。这里有一点很重要云服务器上的反向 SSH 入口只绑定到127.0.0.1而不是0.0.0.0。这样外部网络无法直接访问这个 SSH 隧道只有云服务器本机上的进程可以访问它安全性更好。云服务器上的 frps 配置云服务器上运行frps配置大致如下bindAddr 0.0.0.0 bindPort FRP_SERVER_PORT proxyBindAddr 127.0.0.1 auth.method token auth.token REPLACE_WITH_YOUR_TOKEN说明bindPort FRP_SERVER_PORT本地 Ubuntu 的frpc会连接云服务器的这个端口proxyBindAddr 127.0.0.1反向暴露出来的 SSH 端口只监听云服务器本机auth.token认证 token不能提交到 Git也不要写进公开博客。启动frps./frps -c frps.toml启动成功后云服务器会等待本地 Ubuntu 上的frpc连接。本地 Ubuntu 上的 frpc 配置本地 Ubuntu 上运行frpc配置大致如下serverAddr YOUR_CLOUD_PUBLIC_IP serverPort FRP_SERVER_PORT auth.method token auth.token REPLACE_WITH_YOUR_TOKEN [[proxies]] name local-ubuntu-ssh type tcp localIP 127.0.0.1 localPort LOCAL_SSH_PORT remotePort REMOTE_SSH_PORT说明serverAddr是云服务器公网 IPserverPort对应云服务器上的frps监听端口localPort LOCAL_SSH_PORT是本地 Ubuntu 的 SSH 端口remotePort REMOTE_SSH_PORT是云服务器上暴露出来的反向 SSH 端口由于云服务器上配置了proxyBindAddr 127.0.0.1所以REMOTE_SSH_PORT只会绑定在云服务器本机。启动frpc./frpc -c frpc.toml连接成功后云服务器上的frps日志里会出现类似信息client login info ... new proxy [local-ubuntu-ssh] type [tcp] success tcp proxy listen port [REMOTE_SSH_PORT]验证 SSH 隧道在云服务器上执行ssh -p REMOTE_SSH_PORT ubuntu127.0.0.1如果能登录到本地 Ubuntu就说明链路已经打通。也可以执行一个简单命令验证ssh -p REMOTE_SSH_PORT ubuntu127.0.0.1 hostname whoami pwd这样 Codex 就可以在云服务器上直接操作本地 Ubuntu 了。这对 Codex 调试硬件有什么帮助打通这条链路之后调试体验发生了很大变化。之前和现在的差异可以概括成下面这张图打通之后CodexSSH 到本地 Ubuntu直接执行命令直接读取输出继续分析并执行下一步打通之前Codex 生成命令我手动复制本地 Ubuntu 手动执行我复制输出粘贴给 Codex 分析这对硬件调试尤其重要。例如Codex 可以直接执行lsusb确认 STM32H747I-DISCO 是否被识别STMicroelectronics STLINK-V3也可以直接检查串口设备ls -l /dev/ttyACM*可以直接调用 OpenOCD 烧录 STM32openocd -f interface/stlink.cfg -f target/stm32h7x.cfg ...这样 Codex 不再只是“给建议”而是可以真正参与调试闭环。一个实际例子调试 STM32H747I-DISCO在这个项目里我曾经需要把一个 STM32H747I-DISCO 的 demo 烧录到板子上。板子连接在本地 Ubuntu 上但构建和代码分析主要在云服务器上完成。通过 FRP 打通之后Codex 可以直接在云服务器上编译固件把 ELF 或 BIN 传到本地 Ubuntu调用本地 OpenOCD烧录 STM32H747I-DISCO读取 OpenOCD 输出判断烧录是否成功如果程序没跑起来再读取 PC、寄存器、fault 状态继续分析。例如烧录成功时 OpenOCD 会输出Programming Finished Verified OK Resetting Target如果没有这条远程链路每一次烧录和排错都需要我手动在两个环境之间来回搬运信息。一个实际例子调试 Petoi 机器狗Petoi 机器狗也是类似情况。它连接在本地 Ubuntu 上云服务器无法直接访问串口或 USB 设备。打通 FRP 后Codex 可以直接在本地 Ubuntu 上检查设备、执行脚本、读取返回结果。这让调试变成了真正的远程协作观察设备状态、修改或执行脚本、分析输出、决定下一步动作都可以在同一条 SSH 链路里连续完成。对我来说这比手动复制粘贴命令高效太多。安全注意事项这种方案虽然方便但安全问题必须重视。我采用了几个基本原则第一FRP token 不提交到 Git。auth.token REPLACE_WITH_YOUR_TOKEN真实 token 只放在本地配置文件或环境变量中。第二云服务器上的反向 SSH 入口只绑定到本机。proxyBindAddr 127.0.0.1这样外部机器不能直接访问云服务器的REMOTE_SSH_PORT端口。第三本地 Ubuntu 的 SSH 仍然使用密钥认证。不要为了方便而开启弱密码登录。这件事给我的启发这次经历让我更深刻地意识到AI 编程助手在硬件项目里的能力强烈依赖于它能否进入真实调试闭环。如果 Codex 只能“看代码”和“给命令”那它更像一个高级问答工具。但如果它可以直接运行命令直接读取设备状态直接烧录固件直接分析 OpenOCD 或串口输出直接根据结果调整下一步那它就不再只是提供建议而是在真正参与工程调试。对于嵌入式和机器人项目来说这一点非常关键。因为这类项目的问题往往不只在代码里还在USB 设备是否识别

相关新闻

解锁汽车CAN总线终极密码:opendbc开源项目完全指南

解锁汽车CAN总线终极密码:opendbc开源项目完全指南

解锁汽车CAN总线终极密码:opendbc开源项目完全指南 【免费下载链接】opendbc a Python API for your car 项目地址: https://gitcode.com/gh_mirrors/op/opendbc 在现代智能汽车领域,控制器区域网络(CAN)就像车辆内部的神经…

2026/7/6 4:34:23阅读更多 →
汽车CAN总线数据解析终极指南:opendbc开源项目完全解析

汽车CAN总线数据解析终极指南:opendbc开源项目完全解析

汽车CAN总线数据解析终极指南:opendbc开源项目完全解析 【免费下载链接】opendbc a Python API for your car 项目地址: https://gitcode.com/gh_mirrors/op/opendbc opendbc是一个革命性的开源汽车CAN总线解析工具,它通过提供完整的DBC文件库和P…

2026/7/6 4:34:23阅读更多 →
2026年5月15日更新:ChatGPT 中的个人财务功能

2026年5月15日更新:ChatGPT 中的个人财务功能

🔥 个人主页: 杨利杰YJlio ❄️ 个人专栏: 《Windows 疑难杂症与工单复盘案例库》 《Sysinternals实战教程》 《WINDOWS教程》 《Windows PowerShell 实战》 《人工智能实战合集》 《超简单:用Python让Excel飞起来…

2026/7/6 4:34:23阅读更多 →
SQL集合运算符深度解析:UNION、INTERSECT、EXCEPT原理与避坑指南

SQL集合运算符深度解析:UNION、INTERSECT、EXCEPT原理与避坑指南

1. 为什么我坚持把 SQL 集合运算符讲透——不是为了炫技,而是因为90%的日常数据清洗都卡在这一步 你有没有遇到过这样的场景:老板甩来两份Excel表格,一份是上季度新注册用户,一份是本月完成首单的用户,让你“快速拉个名…

2026/7/6 8:19:45阅读更多 →
3步掌握Windows右键菜单管理工具:ContextMenuManager完全指南

3步掌握Windows右键菜单管理工具:ContextMenuManager完全指南

3步掌握Windows右键菜单管理工具:ContextMenuManager完全指南 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager Windows右键菜单是日常操作中最频繁接触…

2026/7/6 8:19:45阅读更多 →
Java 求职者面试:技术栈与业务场景的探讨

Java 求职者面试:技术栈与业务场景的探讨

面试官与燕双非的技术探讨:Java 求职者面试 在互联网大厂的面试中,候选人燕双非与面试官展开了一场关于 Java 技术栈的激烈讨论。第一轮提问 场景:电商场景 面试官:请问你在 Java SE 中最喜欢的特性是什么?燕双非&…

2026/7/6 8:19:45阅读更多 →
免费IDM激活终极指南:3分钟永久解决下载管理器的激活弹窗问题

免费IDM激活终极指南:3分钟永久解决下载管理器的激活弹窗问题

免费IDM激活终极指南:3分钟永久解决下载管理器的激活弹窗问题 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script 还在为Internet Download Manager&…

2026/7/6 8:19:45阅读更多 →
CMS系统安全风险评估与主动防护体系构建实战指南

CMS系统安全风险评估与主动防护体系构建实战指南

1. 项目概述:为什么你的CMS系统总在“裸奔”?每次看到新闻里又有某个网站因为CMS漏洞被“拖库”、被挂马,甚至被勒索,作为运维或者开发,心里是不是都咯噔一下?我干了十几年安全运维,处理过太多因…

2026/7/6 8:19:45阅读更多 →
笨阶乘C++解法详解(力扣1006)

笨阶乘C++解法详解(力扣1006)

问题解析:LeetCode 1006 “笨阶乘”要求对正整数 N 按递减顺序依次使用乘 *、除 /、加 、减 - 四个运算符循环计算,即 clumsy(N) N * (N-1) / (N-2) (N-3) - (N-4) * (N-5) / (N-6) ...,需返回计算结果。核心在于处理运算符优先级&#xf…

2026/7/6 8:14:44阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/6 4:26:20阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/6 2:48:33阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/6 0:10:35阅读更多 →
Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 技术架构先行:官方接口的合规应用 你是否曾在BP阶段手忙脚乱&#x…

2026/7/6 0:03:39阅读更多 →
多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理 【免费下载链接】mRemoteNG mRemoteNG is the next generation of mRemote, open source, tabbed, multi-protocol, remote connections manager. 项目地址: https://gitcode.com/gh_m…

2026/7/6 0:03:39阅读更多 →
COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南在数据分析和处理领域,去重统计是最基础也是最频繁使用的操作之一。当数据量达到亿级规模时,不同的去重统计方法在性能上可能产生天壤之别。本文将基于 5 亿行数据的实…

2026/7/6 0:03:39阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/6 4:45:01阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/6 4:45:01阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/6 4:45:03阅读更多 →