mosh 估计超过半年了,因为基本上无缝替换 SSH,所以都没有太意识到它的存在,一直忘记了上来推荐一下。如其名字,mosh 差不多就是为移动设备设计的 SSH,现在的发展趋势:笔记本越来越轻便,网速越来越快,服务器越来越强大。结果几乎工作模式都变成了通过笔记本 SSH 到不知道肉身在世界的哪个角落的服务器上做计算。

这其中有一个小小的不便之处就是笔记本不管是从休眠中恢复也好,还是从一处拿到另一处也好,如果网络断开重新连接了,那么 SSH 之类的连接基本上也就挂掉了,当然如果在服务器上用了 GNU Screen 或者 tmux 之类的东西,那么其实只是要再重新连接一下 SSH 然后再 attach 到之前的 session 上就好了,其实也只是小麻烦,但终究还是麻烦的。mosh 就是为了解决这样的麻烦而设计的。

使用非常简单,只要连 SSH 的时候用 mosh 命令代替即可。这样即使你网络断开(截图中顶上的状态栏就是网络断开时 mosh 给的状态提示)或者休眠之后,当网络重新连上之时,mosh 会自动重新连接,而对于你在 mosh 里运行的程序来说,一切就好像你的 SSH 连接从来没有断开过一样。并且替换是无缝的,SSH 所有的公钥私钥验证全都支持——因为 mosh 在登陆验证这部分其实是直接用 SSH 的。

除此之外,由于使用了 UDP,mosh 号称延迟方面也比 SSH 人性化很多。我确实是在非常糟糕的网络环境下也用过 mosh,因为它并不像 SSH 那样等待服务端响应之后才把按键显示出来,所以不会因为卡顿而出现类似于“盲打”的情况,但是也只是感觉比较流畅一点而已,因为毕竟网速慢的话软件层面也没有太多办法。

在使用之前需要同时安装客户端和服务端。比较好玩的是我之前一直以为不需要安装服务端,因为我尝试的时候直接就 work 了,估计是因为在这边已经比较普及了所以我尝试的 server 上都已经安装好了吧,毕竟是自己学校这边搞出来的东西。不过即使要自己安装也非常方便,如果在服务端没有权限,只要安装在自己的 home 目录下面,然后把可执行文件的路径加到 PATH 里,让 SSH 登陆的时候能够找到 mosh-server 这个命令就好了。

另外,mosh 还有一个 Chrome 插件,也许可以在网吧之类的只有 Chrome 浏览器的地方应急的时候用?或者大概主要还是给 ChromeBook 用的吧?

最后,目前 mosh 的最新版本是 1.2.4,这个版本有一个小问题就是不会汇报鼠标事件,如果你在远程的 VIM 或者 tmux 等支持鼠标事件的程序中喜欢用滚轮或者触摸屏滚动屏幕的话,可能会有点不习惯。如果不能忍,可以自己编译安装 git 里的最新版本的 mosh。如果是 OS X 下用 Homebrew 安装的话,只要用

brew install --HEAD mosh

即可安装 git 最新版本。废话就不多说了,请慢用! :P