乐于分享
好东西不私藏

OpenClaw配置实战第二十二篇:助教洵儿去上课

OpenClaw配置实战第二十二篇:助教洵儿去上课

有时候最好的方案,是彻底绕开那个你搞不定的东西。


一、背景:一场 3/15 的培训

3/15 下午 17:30,有一场演示培训。我要在现场展示洵儿——让现场的人扫一个二维码,连上 Mac mini,跟洵儿直接对话。

这听起来不复杂。但有一个问题:演示现场不在家里,我的 Mac mini 在书房。现场的人要访问 Mac mini 上的 Gateway,必须有一条从外网打进来的通路。

我们之前配了 Cloudflare Tunnel,chat.stuartstrategy.cn 正常可用。但有一个麻烦:Cloudflare Access 的邮箱验证 OTP 一直收不到,现场如果突然出问题,没有备用方案。


二、老钳的方案:SSH 隧道 + 零 Cloudflare 依赖

老钳花了 15 分钟 52 秒,完成了整套培训演示方案的部署。

核心思路:完全绕开 Cloudflare。

用 localhost.run 建一条 SSH 隧道,把本地 18789 端口映射到一个临时公网 URL。零配置,零成本,无需任何账号。

# 建立隧道(在 Mac mini 上执行)ssh -R 80:localhost:18789 nokey@localhost.run

执行后会输出一个类似 https://xxx.lhr.life 的临时 URL。这个 URL 就是现场演示用的地址。

关键限制:localhost.run 每次 SSH 连接都会生成新 URL。这意味着到培训现场后需要重建隧道,重新生成二维码。


三、配套输出物

老钳同步输出了四个文件,让培训准备变成一套可执行的 checklist:

① training-demo-plan.md(175 行)

完整方案文档,包含操作流程、现场风险应对、故障排除步骤。这是整个演示的「剧本」。

② training-qr-code.png(370×443px)

指向当前隧道 URL 的二维码。注意:到现场后 URL 会变,需要用 training-gen-qr.py 重新生成。

③ training-cleanup.sh

培训结束后一键关闭隧道和 demo session,撤销现场公开访问。

# 培训结束后执行bash ~/.openclaw/workspace/training-cleanup.sh

④ training-gen-qr.py

URL 变更时重新生成二维码,用 Python qrcode 库,输出到同一路径覆盖。


四、MacBook 操作手册

培训当天我会带 MacBook 去,通过 Tailscale SSH 连接书房的 Mac mini。老钳顺势创建了一份 Notion 页面作为现场操作手册,包含:

  • 到场后的操作流程:SSH 连接 Mac mini → 确认 Gateway 存活 → 重建隧道 → 生成二维码 → 投屏展示
  • Tailscale 连接方式:所有 SSH / SCP 命令使用 Tailscale IP(100.x.x.x),不依赖局域网
  • 故障排除:Gateway 挂了怎么拉起,隧道断了怎么重建,二维码怎么更新
  • 速查卡片:常用命令一页纸,不需要翻文档

这份手册的设计原则是:现场不应该有任何需要思考的时刻,每一步都是查手册、照着执行。


五、培训前必做 Checklist

时间
操作
备注
出发前
确认 Mac mini Gateway 存活(lsof -i:18789
在家执行
出发前
确认 Tailscale 双端连通
MacBook + Mac mini
到场后 16:30
SSH 连 Mac mini,重建 localhost.run 隧道
URL 每次都变
到场后 16:35
运行 training-gen-qr.py 生成新二维码
覆盖旧文件
演示前
投屏二维码,在旁边标注 Gateway 密码 labokoushitou
现场告知
培训结束
执行 training-cleanup.sh 关闭公开访问
不要忘记

六、踩坑与反模式

踩坑一:localhost.run 隧道 URL 每次都会变

不要提前把 URL 印在 PPT 里。到场重建隧道后,立刻用 training-gen-qr.py 重新生成二维码,再投屏。

踩坑二:演示结束后不要忘记关闭隧道

localhost.run 的临时 URL 在 SSH 连接断开后自动失效,但如果忘记执行 cleanup,tmux session 里的隧道进程还在跑。执行 training-cleanup.sh 确保完整关闭。

踩坑三:Gateway 密码不要只靠口头传达

现场人员需要输入 Gateway 密码才能访问。把密码写在二维码旁边的投屏里,或者提前打在纸上,避免口头传达出错。

踩坑四:不要依赖现场 Wi-Fi

MacBook 连现场 Wi-Fi,Mac mini 在家走宽带,Tailscale 穿透。这条链路不依赖任何额外条件,但要提前确认 Tailscale 两端都在线。


七、可复用 Checklist

  • [ ]  演示环境隔离:建 localhost.run SSH 隧道,不动生产 Cloudflare 配置
  • [ ]  培训前准备:training-demo-plan.md + 二维码 + cleanup 脚本三件套
  • [ ]  到场后第一件事:重建隧道,重新生成二维码
  • [ ]  演示完最后一件事:bash training-cleanup.sh 关闭公开访问
  • [ ]  双端 Tailscale 确认:MacBook + Mac mini 均在线
  • [ ]  Gateway 密码放到可视位置,不依赖口头传达

八、下一步

培训准备全部就绪。3/15 下午需要在 16:30 执行一次培训前操作:SSH 连 Mac mini → 重建隧道 → 生成二维码 → 确认 Gateway 存活。

同时,P6.8 的最后一步仍然待完成:企微客户端建群 + 真机测试「洵儿你好」。这件事可以在培训之后找个安静的时间处理。


九、后记:3/15 实战结果

事情比预想的顺。

3/15 的培训,满堂彩。

到场前按 checklist 执行:SSH 连上 Mac mini,重建 localhost.run 隧道,training-gen-qr.py 生成新二维码,确认 Gateway 存活。整套流程在 16:30 之前全部跑完,没有临时状况。

现场二维码投屏,现场人员扫码接入,跟洵儿实时对话。连接稳定,回答流畅,没有 Connection error,没有超时,没有需要临场救火的时刻。演示方案完整落地。

培训结束后,顺势推进了 P6.8 的最后一步:企微智能机器人建群 + 群聊验证

  • 企微端创建了演示群
  • 洵儿以智能机器人身份接入,长连接模式稳定
  • 群内发送「洵儿你好」,洵儿响应,回复正常
  • 群聊链路验证通过 ✅

P6.8 正式收工。

至此,洵儿的公开触达能力完整了:从「只能本机聊」到「培训现场可演示、企微群聊可响应」,这条路从 2/24 的七个坑走到 3/15,走了整整二十天。


作者:喜感星球 × 老钳 | 2026.03

*localhost.run:一个零账号、零配置的 SSH 隧道服务,适合临时演示场景。每次连接生成不同的临时 URL,断开即失效。*