mosh
当网络不配合时,mosh 能让会话保持存活:从 Wi-Fi 切到蜂窝网络、合上盖子、走出 信号范围 —— 重新连接后,会话还在那里。Tessera 为它搭配了 iOS 上其他 mosh 客户端 都没有的东西:真正的回滚缓冲。
mosh 要求主机上安装了 mosh-server,并且默认开放 UDP 端口 60000–61000。可在
主机编辑器的传输方式设置中按主机选择它。
漫游
mosh 会话绑定的是你的身份,而不是网络路径。Tessera 会在 Wi-Fi ↔ 蜂窝网络切换、 地址变化以及睡眠/唤醒之间保持接入 —— 会话就从数据包中断的地方继续下去。在 VPN 或 tailnet 上同样如此;mosh 只需要 UDP 能到达服务器。
真正的回滚缓冲
原版 mosh 没有回滚缓冲 —— 它在设计上只同步可见的屏幕,因此滚出屏幕的内容根本不会 被发送。其他所有 iOS mosh 客户端都继承了这个限制,并让你去用 tmux 的复制模式。
Tessera 则会把历史合成出来。在由 tmux 支撑的 mosh 会话中,终端跑在 UDP 上, 同时有第二条 SSH 侧信道与 tmux 通信;向上滚动会通过该信道拉取真实的历史并就地 显示 —— 可用在终端中查找搜索、可选中、完整无缺。
在你阅读时,它的行为是这样的:
- 向上滚动会让历史定格在原处 —— 新输出不会把你拽回底部。
- 回到底部(或开始输入)会撤下这层覆盖,回到实时的最新画面。
- 用力一甩会一直滚下去:第一页立即加载,其余历史随后流式补上,直到服务器保留 的深度为止。
它需要什么
- 一种 tmux 启动模式。 回滚缓冲合成适用于自动 tmux和具名 tmux会话 (自动 tmux 是默认值)。以自定命令启动的 mosh 主机没有 tmux 可询问,因此它 的滚动和原版 mosh 一样。
- 服务器端历史。 深度受服务器 tmux
history-limit的限制 —— Tessera 只能 显示 tmux 保留下来的内容。 - 主屏幕。 像
vim、less和htop这样的全屏程序自己处理滚动;Tessera 会像所有终端一样,把你的滚动作为输入转发给它们。
mosh 与其他一切
获取历史所用的同一条 SSH 侧信道,也承载着 mosh 主机的 tmux 窗口与窗格和端口转发,而 文件面板会打开它自己的 SSH 桥接 —— 因此文件传输和隧道在 mosh 和 纯 SSH 上表现完全一致。
有一点需要注意:mosh 的 UDP 无法穿过 SSH 跳板主机。对于 经跳板链连接的主机,Tessera 会先尝试 mosh,如果 服务器在 UDP 上不可达则回退到 SSH。若目标本来就能通过 UDP 到达 —— 比如经由 VPN 或 tailnet —— 它仍会以 mosh 方式继续工作。