· 4 min read
Mosh: SSH远程登录的替代者
Mosh的连接可在网络断开连接后自动重连,而不会中断会话,Mosh在高延迟和不稳定的网络条件下具有更快的响应速度和更少的延迟,这使得在远程连接中使用命令行工具更加流畅,并且Mosh会根据当前网络状况自适应调整连接参数,这有助于提高连接质量

使用ssh登录远程服务器有两个问题
- 自动断连,需要频繁重连
- 延迟高时,输入卡顿
Mosh很好地解决了这两个问题,使用基于UDP加密传输的状态同步协议(State Synchronization Protocol),即使本地切换网络也能无缝重连.
SSH在高延迟下无法通过Control-C中止进程运行的问题彻底解决了,再也不会出现卡半天的情况了哈哈哈。
相比传统的SSH工具,Mosh的优势
高效的移动网络支持:Mosh对于高延迟和不稳定的网络连接,如3G、4G、Wi-Fi和移动网络提供了很好的支持。Mosh的连接可在网络断开连接后自动重连,而不会中断会话。
安全性:Mosh通过加密和身份验证保证了安全性。Mosh会话在客户端和服务器之间进行加密,即使黑客能够截获你的数据,也无法破解它。
更好的用户体验:Mosh在高延迟和不稳定的网络条件下具有更快的响应速度和更少的延迟,这使得在远程连接中使用命令行工具更加流畅。
跨平台支持:Mosh支持各种操作系统,包括Linux、macOS、Windows、Android和iOS等。
自适应调整:Mosh会根据当前网络状况自适应调整连接参数,这有助于提高连接质量。
Mosh兼容SSH,服务器只要开启了ssh-server就可以用Mosh.
下图是Mosh与SSH的延迟对比(3G网络环境)

可以看到Mosh在70%的情况下延迟低于10ms,几乎没有延迟的感知.加上Mosh会缓存用户的输入,不会像SSH一样出现卡顿感,即使在网络环境不佳时依然流畅使用.
服务端配置
# 安装ssh server
sudo apt install openssh-server
# 启动及开机启动
sudo systemctl enable ssh --now
# 查看ssh状态
sudo systemctl status ssh
# 安装Mosh
sudo apt install mosh
# 开启udp端口between 60000 and 61000
sudo ufw allow 60001:61000/udp
# 或者打开特定端口,更安全
sudo ufw allow 60089/udp
# 重启防火墙
sudo systemctl restart ufw客户端连接
# 客户端连接mosh
mosh username@ip -p 60089ssh客户端配置文件
编辑或创建~/.ssh/config文件
Host aws-jp
HostName 127.0.0.4 # ssh服务器ip地址
Port 22
User root # ssh服务器用户名
IdentitiesOnly yes # 仅使用IdentityFile进行登录
IdentityFile /Users/your-username/.ssh/id_rsa # ssh私钥目录连接服务器
ssh aws-jp使用普通sshmosh aws-jp -p 60089使用mosh



