手机上的 Mosh 与 SSH:跟进智能体该用哪个
你让 Claude Code 去跑一个长任务,合上笔记本出门。火车进了隧道,手机从 Wi-Fi 切到蜂窝网络,还断了一分钟信号,再看时 SSH 会话已经死了。这是意料之中的:SSH 从来不是为每隔几分钟就换网络的客户端设计的,而 Mosh 和 Eternal Terminal 正是为此而生。
下面讲每一个做什么、在手机上会发生什么,以及怎么选。如果你想了解把智能体装进口袋的完整方案,先看如何在手机上使用 Claude Code。
SSH 在手机上会怎样
SSH 跑在一条 TCP 连接上,这条连接绑定在一个 IP 地址和一对套接字上。手机从 Wi-Fi 切到蜂窝网络时,IP 变了,而服务器并不知道。连接就卡在那里,直到超时把它杀掉。iOS 或 Android 为省电让应用的网络休眠,或者因为需要内存而杀掉应用,也是一样的结果。
你丢掉的不只是屏幕。挂在那个 SSH 会话下的进程可能收到 SIGHUP 而一起死掉。所以直接在 SSH shell 里启动的智能体很脆弱,这也是为什么这篇文章的姊妹篇给编程智能体用的 tmux几乎是必读。
Mosh:UDP 和无声重连
Mosh(mobile shell)只在启动时用 SSH。它通过 SSH 认证,在你的电脑上启动 mosh-server,此后就通过 UDP 通信。没有 TCP 连接可断,客户端换 IP、丢信号或休眠都没关系,网络恢复后会话还在。
实际表现是:
- 从 Wi-Fi 切到蜂窝网络,会话毫无察觉。
- 如果服务器不再应答,应用会告诉你,而不是关掉会话。
- 带预测的本地回显:你输入的内容立刻显示出来并带下划线,服务器回应后再确认。在延迟高的蜂窝链路上,你能感觉到差别。
它的代价是:
- 电脑上必须开放 UDP 60000–61000(每个会话占用这个范围里的一个端口)。
- 没有回滚历史。Mosh 只同步屏幕上的内容。想往上翻看智能体输出过什么,就在 tmux 里工作。
- 如果系统杀掉应用,Mosh 会话就结束,无法恢复。
Eternal Terminal:TCP,但能续上
Eternal Terminal(ET)走的是相反的路。它跑在 TCP 上,默认端口是 2022,但自己维护会话状态,所以连接断开时它会重建连接,并重发漏掉的内容。它需要你的电脑上运行着 etserver,并且 SSH 会话的 PATH 里有 etterminal。
在手机上,它的优势是:它是 Wendo 里(Android 上)唯一能在应用被关闭后仍保留会话的传输方式。会话会出现在首页,打开后从原来的位置继续。Wendo 把 ET 标为实验性,所以在依赖它之前请记住这一点。
简单总结
- 手机从 Wi-Fi 切到蜂窝网络或者休眠时,SSH 会断,Mosh 和 ET 能撑住。
- 系统关掉应用时,用 SSH 和 Mosh 会话都会丢;用 ET 能续上。
- SSH 和 ET 有回滚历史,Mosh 没有。
- SSH 和 ET 走 TCP(ET 用 2022 端口),Mosh 走 UDP。
- 经由跳板机时,Wendo 里只有 SSH 能用。
安装 mosh-server
在运行智能体的那台电脑上:
# macOS
brew install mosh
# Debian / Ubuntu
sudo apt install mosh
# Fedora
sudo dnf install mosh
检查它是否在普通 SSH 连接的 PATH 里,而不只是你的交互式终端里:
ssh my-server 'which mosh-server'
在 Apple Silicon 的 Mac 上,Homebrew 把它装在 /opt/homebrew/bin/mosh-server,而非交互式会话的 PATH 里不一定有这个目录。遇到这种情况,Wendo 允许你在连接里设置 mosh-server 的路径。
防火墙说明
Mosh 需要放行入站 UDP 60000–61000。在使用 ufw 的 Linux 上:
sudo ufw allow 60000:61000/udp
使用 firewalld 的话:
sudo firewall-cmd --permanent --add-port=60000-61000/udp
sudo firewall-cmd --reload
如果你的电脑在路由器后面,就像转发 22 端口那样转发这段 UDP 范围。对于 ET,用同样的方法开放 TCP 2022(sudo ufw allow 2022/tcp)。
如果你的 SSH 经过代理或负载均衡器,Mosh 的 UDP 可能被发到错误的 IP。Wendo 为这种情况提供了“UDP 使用服务器 IP”选项。
在 Wendo 里选一个
编辑连接时,传输方式字段提供自动、SSH、MOSH 和 ET。选择自动时,Wendo 先尝试 Mosh,再尝试 ET,两者都不可用就回退到 SSH。从“自动”开始就好。
有一点要特别说明:目前 Mosh 和 ET 只在 Android 版里有。在 iPhone 上,Wendo 始终走 SSH(“自动”会直接用 SSH 连接;如果手动选 MOSH 或 ET,应用会提示它们在 iOS 上不可用)。如果你用的是 iPhone,帮你扛住断线的是 tmux:连接断了,智能体还在继续干活,你重新连上就回到原来的位置。
在 Android 上,一个实用的经验法则:
- 你会带着手机走动,会话持续几分钟:Mosh。
- 你想关掉应用,一小时后回来在首页找到会话:ET。
- 你通过跳板机连接:SSH。在 Wendo 里,Mosh 和 ET 都不能与跳板机一起使用。
- 你的电脑没法开放 UDP 端口:ET 或 SSH。
Mosh 和 Eternal Terminal 是 Wendo Pro 的功能;没有 Pro 时,连接走 SSH。各字段的说明见会话文档。
无论选哪种传输方式,都请在 tmux 里启动智能体。传输方式让屏幕保持连通;tmux 让进程保持存活,还给你 Mosh 所缺的回滚历史。常见的组合是用 Mosh 或 ET 负责传输、用 tmux 负责干活,这里是你需要的最少 tmux 知识。想在智能体请求权限时收到提醒,请看 hook。