返回博客

2026年8月19日

iPhone 上的 SSH 会话,怎么做到断网不断线

Mosh 能让 shell 扛过锁屏、隧道和 Wi-Fi 切蜂窝。用 SwiftServer 配好它,五分钟。

iPhone 上的 SSH 会话,怎么做到断网不断线

手机上的 SSH 会话活不长。锁屏、进隧道,或者从 Wi-Fi 切到蜂窝网络,底层的 TCP 连接就断了。原来的 shell、目录和正在看的命令,都得重来。

解法是 Mosh,即 mobile shell。它经 SSH 启动,之后改走 UDP,两端各自保存会话状态。地址变了,会话跟着走。SwiftServer 自己实现了客户端,你只需在服务器上装一个包。

火车窗边,手里的 iPhone 上开着一个 Mosh 会话

1. 在服务器上安装 mosh

# Debian、Ubuntu、Raspberry Pi OS
sudo apt install mosh

# Fedora、Rocky、AlmaLinux
sudo dnf install mosh

# macOS,用 Homebrew
brew install mosh

SwiftServer 需要服务器上已有 mosh-server,但不会替你安装。

2. 放行 UDP 端口

Mosh 走 UDP,一个会话占一个端口,默认在 60000–61000 之间。在服务器防火墙上放行这段入站范围:

# ufw
sudo ufw allow 60000:61000/udp

# firewalld
sudo firewall-cmd --permanent --add-port=60000-61000/udp
sudo firewall-cmd --reload

只想开放几个端口的话,在服务器上收窄范围,再在这台机器的 Mosh 设置里填入相同范围。

3. 把机器切到 Mosh

在 SwiftServer 里打开这台机器,把连接设为 Mosh,保存。终端按钮变成启动 Mosh 终端。凭据、主机密钥和已配置的跳板机或代理都保持不变。

4. 连上,然后该干嘛干嘛

照常启动终端。SwiftServer 先通过 SSH 登录,启动 mosh-server,再把会话交给 UDP。从这以后:

  • 锁屏,一小时后回来,提示符还停在原地。
  • 从 Wi-Fi 换到蜂窝网络,状态行会短暂显示「Mosh 正在重建 UDP 连接」,接着「Mosh UDP 连接已恢复」。shell 全程没察觉。
  • 链路慢的时候打字,按键立刻显示出来,服务器确认之前带下划线。

一次部署、一轮训练或一个正在执行任务的 agent,这类长时间任务从此在地铁上看一眼就行。

常见问题

iPhone 上需要装 Mosh 吗? 不需要。SwiftServer 自己实现了 Mosh 客户端。服务器上要有 mosh-server,手机上什么都不用。

Mosh 能走跳板机吗? SSH 启动这一步可以,跳板机路由、SOCKS5 或 HTTP CONNECT 代理都行。之后 UDP 会话是直连机器的,所以它需要一个手机能访问到的地址;和 SSH 地址不一样的话,在机器的 Mosh 设置里填一个 UDP 主机。

会话起不来,去哪里看? SwiftServer 里的 Mosh 诊断会显示启动停在了哪一步。常见原因是 PATH 里没有 mosh-server、UDP 范围被防火墙挡住,或者 NAT 不保持映射。

Mosh 免费吗? 免费。Mosh 属于免费版,iPhone、iPad 和 Mac 都能用,机器数量和会话数量不设上限。

Mosh 功能页有整体介绍,Mosh 文档讲自定义端口、UDP 主机和排查方法。