SSH 是管理服务器的行业标准,但在手机上,只要切换 Wi-Fi 与蜂窝数据或锁定屏幕,连接就会中断。Mosh 能在切换网络时保持会话存活,即使存在高延迟,也能即时显示键盘输入的内容。它并非要取代 SSH:而是先通过 SSH 建立连接并验证身份,随后基于 UDP 进行数据通信。

什么是 SSH,Mosh 又带来了什么

SSH 会与服务器建立一条加密的 TCP 连接。一旦手机的 IP 地址发生改变,该连接便会断开,必须重新登录。Mosh(mobile shell)首先通过 SSH 登录服务器并启动 mosh-server,此后会话便转由 UDP 协议传输。这带来了三大核心优势:

  1. 网络漫游(Roaming):在切换网络或更换 IP 后,会话仍能持续保持。
  2. 本地预测回显:键入的内容立即可见,并在服务器返回不同响应时自动校正。
  3. 休眠后自动重连:手机解锁后,会话立即无缝恢复原样。
SSHMosh
传输协议TCPUDP(先通过 SSH 登录)
Wi-Fi 切换至蜂窝数据中断保持连接
端口22/TCP(或自定义端口)22/TCP 用于初次连接 + UDP 60000-61000
端口转发与 X11 转发支持不支持
窗口调整大小时自动重排文本支持不支持(mosh-server 暂不支持)

参考来源:mosh.org 与 man mosh,核实于 2026-10-18。

哪些场景不建议使用 Mosh

  • 需要使用隧道或端口转发时:Mosh 不支持这些功能。
  • 防火墙或网络环境拦截了 UDP 60000-61000 端口段。虽然可以使用 -p 参数指定单个端口,但该端口必须对外开放。
  • 服务器端未安装 mosh-server 且无法自行安装时(Debian/Ubuntu 可执行 sudo apt install mosh,macOS 可执行 brew install mosh)。

如何在 termi1 中使用 Mosh

termi1 在 iPhone、iPad 和 Android 上集成了官方的 mosh-client,而非第三方二次实现。在连接表单中,SSH 是默认模式,Mosh 则为一个开关。你也可以直接粘贴 mosh-server 输出的 MOSH CONNECT … 命令行。如果服务器端未安装 Mosh,会话将自动回退到 SSH 并由应用明确提示,而不会静默失败。会话在 tmux 中运行,因此即使断开连接,后台任务也会持续保留,随时可以重新连接。

如果将 Mac 作为服务器,可以使用 termi1 Companion,这是一款适配菜单栏的免费应用(要求 macOS 14 或更高版本)。可直接在 termi1.com 下载经 Apple 签名并公证的 DMG 安装包;该应用未在 Mac App Store 上架。它主要提供三项功能:

  • 检查远程登录、mosh-server 和 tmux 是否已启用。若缺少 Mosh,会打开终端并预填 brew install mosh,但不会自动执行。
  • 通过 6 位数字代码与 iPhone 或 iPad 配对:手机端会自动发送公钥写入 ~/.ssh/authorized_keys,无需手动复制粘贴。
  • 若启用该选项(默认关闭),在 tmux 中运行的长耗时任务结束时,会在 Mac 上发送通知提醒。

常见问题

Mosh 能完全取代 SSH 吗?

不能。Mosh 需要借助 SSH 进行身份验证并在服务器上启动 mosh-server。之后会话才转由 UDP 传输,但你的 SSH 密钥与配置保持不变。如果没有服务器的 SSH 访问权限,就无法使用 Mosh。

使用 Mosh 需要开放哪些端口?

需要开放初次登录使用的 SSH 端口(通常为 22/TCP)以及用于会话传输的 UDP 60000-61000 端口范围。如果不想开放整个端口段,可以使用 -p 参数指定固定端口,并在防火墙中仅放行该端口。

Mosh 支持隧道或端口转发吗?

不支持。Mosh 不支持端口转发或 X11 转发。如果需要为数据库或 Web 管理面板建立隧道,建议为此建立一个常规的 SSH 连接,而将 Mosh 专门用于交互式终端操作。

如果服务器没有安装 Mosh,在 termi1 中连接会怎样?

连接会自动通过 SSH 继续建立,同时 termi1 会提示未检测到 mosh-server。你可以在服务器上通过 sudo apt install mosh(Debian/Ubuntu)或 brew install mosh(macOS)进行安装,然后重新开启该开关。