访问国外的服务器时,最让人抓狂的往往不是服务器本身,而是那条又慢又不稳定的网络:敲一个字符要等半秒才回显、写着写着突然 Connection closed、换个 Wi-Fi 直接断线。这些问题,本质上是 SSH 基于 TCP 连接的固有限制,而 Mosh(Mobile Shell)就是为这类场景设计的。
一、为什么 SSH 会卡,Mosh 为什么不卡
SSH 的「卡」来自两个根因,而 Mosh 恰好都绕开了:
| 问题 | SSH 的表现 | Mosh 的解法 |
|---|---|---|
| TCP 连接 | 连接断了就整个会话挂掉,切网、IP 变化直接断线 | 改用 UDP + 状态同步协议,IP 变了也不掉线 |
| 每个字符都往返 | 每敲一个键都要「客户端→服务器→回显」,延迟高时输入极卡 | 本地回显(Local Echo),字符立即显示,服务器确认前加下划线 |
NOTEMosh 的全称是 Mobile Shell,由 MIT 开发的开源项目。它的认证仍然走 SSH,只是认证完成后,把交互会话切换到自己的 UDP 协议(SSP,State Synchronization Protocol)。
本地回显是怎么「不卡」的
SSH 是「你打一个字,等服务器把字回传给你,屏幕上才显示」。在 300ms 延迟的链路上,每敲一下都要等 300ms,体验像打字机卡壳。
Mosh 则预测你要输入的内容,先在本地画出来(未确认的字会显示下划线),等服务器确认后再转正。所以即使延迟很高,打字体验依然是「丝滑」的。
断线重连是怎么「不掉线」的
因为 Mosh 用 UDP 而不是 TCP,它不维护一条脆弱的连接,而是靠两端各自维护状态。你合上笔记本盖、从 Wi-Fi 切到 4G、甚至断网几分钟,会话都还在,网络恢复后自动续上,提示 [mosh] waiting for network... 然后原地继续。
二、安装 Mosh(两端都要装)
Mosh 是客户端/服务器架构,两边都要安装。这是新手最容易漏的一步——只装了本地,连不上服务器,还以为是配置错了。
本地(Mac / Linux)
macOS 用 Homebrew:
brew install moshLinux(Debian/Ubuntu):
sudo apt install moshWindows 用户可以在 WSL 里装,或用 MobaXterm 等自带 Mosh 的客户端。
服务器端(以 Debian/Ubuntu 为例)
sudo apt updatesudo apt install mosh -yCentOS/RHEL/Fedora 系:
sudo dnf install epel-release -ysudo dnf install mosh -y三、放行 UDP 端口(最关键的一步)
Mosh 认证走 SSH(默认 22 端口),但认证之后的数据走 UDP 的 60000 到 61000 端口区间。所以只开了 22 端口是连不上的,很多人在这一步卡住。
服务器本机防火墙
UFW(Ubuntu/Debian 常用):
sudo ufw allow 60000:61000/udpnftables:
sudo nft add rule inet filter input udp dport 60000-61000 acceptiptables:
sudo iptables -I INPUT 1 -p udp --dport 60000:61000 -j ACCEPTfirewalld(CentOS/RHEL):
sudo firewall-cmd --permanent --add-port=60000-61000/udpsudo firewall-cmd --reloadWARNING如果你用的是云服务器(阿里云、腾讯云、AWS 等),除了系统防火墙,还要去云控制台的安全组/防火墙规则里,把这组 UDP 端口也放行。否则会一直卡在认证阶段连不上。
四、使用 Mosh 连接
Mosh 的命令和 SSH 几乎一样,上手零成本:
# 基本连接mosh user@服务器IP
# 如果 SSH 配置里已经写了 Host 别名,可以直接用mosh 别名
# 服务器改了 SSH 端口(比如 2222)mosh --ssh="ssh -p 2222" user@服务器IP
# 指定密钥mosh --ssh="ssh -i ~/.ssh/id_ed25519" user@服务器IP登录后你会发现,即使网络很卡,敲键盘也几乎感觉不到延迟了。
五、进阶:Mosh + tmux 才是完全体
Mosh 解决的是「连接不断」,但不解决「会话不丢」——它不保存滚动历史,服务器重启或本地终端关闭后,会话也没了。所以日常最佳搭配是:
- tmux 负责「会话不丢」:把程序跑在 tmux 会话里,随时 attach 回去;
- Mosh 负责「连接不断」:网络再差也不掉线。
组合用法,登录后自动进入 tmux 会话:
mosh user@服务器IP -- tmux new -A -s main这样就算中途断网、换设备,重新连上还是同一个 tmux 会话,无缝接续。
六、Mosh 的几个限制,提前知道
Mosh 不是万能的,有几个明确的能力缺口,遇到这些需求得退回原生 SSH:
- 不支持端口转发:
-L/-R/-D隧道、X11 转发都没有; - 不支持文件传输:
scp、rsync依然走 SSH,Mosh 只负责交互式 shell; - 没有滚动回看:只保留当前屏幕,终端滚屏历史要配合 tmux 才有;
- 要求 UTF-8:两端都要
LANG=en_US.UTF-8,老的 C locale 会显示异常; - 极端网络下可能被拦:少数严格的企业网络屏蔽全部 UDP,这时 Mosh 连不上,只能退回 SSH。
NOTE如果你有这些需求(隧道、传文件),正确姿势是「并行使用」:需要交互操作时用 Mosh,需要
scp/端口转发时另开一个原生 SSH。两者不冲突。
七、总结
对「访问国外服务器卡顿、掉线」这个痛点,Mosh 是对症下药的工具:
- 本地回显解决高延迟下的输入卡顿;
- UDP + 状态同步解决切网、断线导致的会话丢失;
- 安装简单、命令和 SSH 几乎一致,半小时就能上手;
- 记住两件事:两端都装、放行 UDP 60000 至 61000 端口;
- 配合 tmux,做到「连接不断 + 会话不丢」的完全体。
如果你的服务器在国内、网络又稳,SSH 已经够用;但只要涉及跨境访问或移动场景,Mosh 带来的流畅度提升会非常明显,值得一装。