博客
超越 SSH:为什么 WebSocket 更适合 AI 编程智能体
SSH 为交互式人工会话设计,AI 编程智能体需要不同的东西。这里解释 WebSocket 为何是更好的选择。
继续查看该栏目下的产品与工程更新。
浏览此分类"为什么不直接 SSH 到 Mac?"——这是开发者第一次听说从手机控制 Claude Code 时的典型反应。
SSH 成熟、安全、无处不在。但 AI 编程智能体的交互模式与交互式 Shell 有根本区别,这些差异叠加后会导致更差的体验。
交互模型不匹配
SSH 设计于 1995 年,面向一种模型:人坐在终端前,输入命令,读取输出。会话是交互式同步的。
AI 编程智能体颠覆了这一模型:
| SSH(交互式 Shell) | AI 智能体控制 | |
|---|---|---|
| 会话时长 | 数分钟到数小时的主动使用 | 数小时到数天,多为空闲监控 |
| 人类注意力 | 持续 | 间歇性——收到通知时查看 |
| 输入模式 | 频繁击键 | 偶尔提示 + 审批决策 |
| 输出模式 | 响应你的命令 | 长时间自主输出流,扫读而非细读 |
| 关键事件 | 你在盯着所以能看到 | 不盯着就可能错过 |
问题 1:无推送通知
AI 编程的最佳工作流是:发送任务 → 放下手机 → 收到完成通知 → 查看继续。
SSH 无法做到第三步。SSH 协议没有向移动设备推送通知的机制。
WebSocket 方案: 服务器监控 Claude Code 输出和 hook 事件,检测到完成或审批请求时,通过 WebSocket 推送结构化事件,iOS 应用将其转为原生推送通知。
问题 2:iOS 后台行为
iOS 会积极挂起后台应用。SSH 客户端进入后台约 30 秒后网络连接被断开,重新打开时"broken pipe"。Mosh 稍好但仍无法解决通知问题。
WebSocket 方案: 服务器缓冲终端输出,不受客户端连接状态影响。iOS 应用回到前台后自动重连,多阶段状态恢复(0.2s、0.7s、1.5s),同时关键事件在应用挂起时也能以推送通知送达。
问题 3:会话状态管理
多个并行任务时,SSH 需要手动 tmux attach -t session-a,逐个切换、检查、断开——在手机键盘上操作很痛苦。
WebSocket 方案: 服务器将会话管理暴露为结构化命令。iOS 应用显示会话列表和状态,点击切换,创建新会话时可浏览 Mac 文件系统选择路径。
问题 4:智能体事件语义
SSH 传输原始字节,不理解终端中发生的事情。Claude Code 有 hook 系统在特定事件触发脚本,但 SSH 没有干净的方式路由这些事件。
WebSocket 方案: 服务器通过 HTTP POST 接收 hook 事件,解析、去重(3 秒窗口),通过同一 WebSocket 连接推送到 iOS 应用。一条连接,多种数据类型。
问题 5:认证与访问控制
SSH 认证在移动端使用不便:iOS 密钥管理不方便、需要配置 sshd、端口转发需要额外设置。
WebSocket 方案: Tactic Remote 使用 API Key 认证。局域网连接 API Key 可选,Cloudflare Tunnel 连接必须。Mac 应用生成 32 字符随机密钥,通过 QR 码传输。
SSH 仍然更好的场景
- 管理多台服务器
- 需要文件传输(SFTP/SCP)
- 使用非 Claude 工具
- 需要端口转发
- 合规要求 SSH
架构图
关于 Mosh
Mosh 使用 UDP 改善了移动 SSH 体验(网络漫游、连接持久性、本地回显),但仍不解决核心问题:无推送通知、无智能体事件感知、无结构化会话管理。
结论
问题不是"SSH 还是 WebSocket"的抽象协议对比,而是"你的工作流需要什么交互模型"。
管理服务器和运行交互命令,SSH 是正确的协议。控制一个自主运行的 AI 智能体、需要间歇性关注和推送通知,专为此设计的 WebSocket 架构能解决 SSH 无法解决的问题。