Mosh 全名 Mobile Shell,是 MIT 推出的一个可以替代 SSH 的远程终端程序,适用于 GNU/Linux、FreeBSD、Solaris、Mac OS X 和 Android。它支持间断性连接,允许漫游,提供了本地回显和用户输入的行编辑。

它旨在提供典型的SSH交互,此外增加了:

  • 如果客户端休眠随后唤醒或者暂时断网,Mosh会保持会话状态。
  • Mosh允许客户端或者服务器“漫游”、改变IP地址,与此同时保持连接。与SSH不同,在Wi-Fi网络之间切换,或者从Wi-Fi切换到蜂窝数据或者有线连接,Mosh都可以保持连接。
  • Mosh在后台运行一个服务器预测模型,能够智能猜测每一个键击如何影响屏幕的显示。当预测达到置信区间,它将在等待从服务器传回确认的时候提前显示。大多数时候,左右方向键可以提前回显。

所以,Mosh可以用在延迟较大的连接。比如说蜂窝数据或者质量较差的Wi-Fi。与其他协议在本地回显模型方面不同的是,Mosh可以很好的与全屏程序协作,比如emacs、vi、alpine和irssi,自动从偶尔的预测错误中修复。在高延迟的连接中,Mosh用下划线标注预测,当收到服务起的确认后,便去掉下划线。

Mosh不支持X转发或者是非互动性的SSH应用,包括端口转发。

其他特性:

  • Mosh会调整帧率,避免在慢的连接中填满发送队列,所以“Control-C”常常使用来停止一个假死的进程。
  • 在一段时间没有收到服务器的相应时,Mosh会提醒用户。
  • Mosh支持分包丢失划分标志的有损网络。
  • Mosh在处理Unicode边界情况时好于SSH,自身存在终端模拟器,但是需要UTF-8的环境来运行。
  • Mosh借助SSH来完成连接和用户认证,它本身不包含高权限代码。

获得Mosh
Mosh的主页中有在各种平台下如何安装它的方法,以及从源代码编译安装的方法。
需要注意的是mosh客户端收到一个AES会话钥匙作为环境变量。如果你为其它操作系统提供了接口,请确保一个执行中进程的环境变量不会被其它用户读取。我们确认这在GNU/Linux,OS X以及FreeBSD是会发生的。

使用
mosh-client必须存在于用户机器,mosh-serve安装在远程主机。
用户执行

如果mosh-client或者mosh-serve不在用户路径,mosh可以通过--client=PATH和--server=PATH指定位置。更多的选项可以在mosh(1)用户手册中查询。
在Mosh主页还有更多的例子以及FAQ

它如何工作
Mosh通过SSH到user@host来确认连接,SSH将提示用户输入密码,或者使用公钥来登录。
以此出发,mosh-server运行在服务器上,服务进程监听一个UDP端口,并且将它的端口号和一个AES-128密钥通过SSH发送回客户端,SSH连接随后关闭,接下来的终端会话通过UDP进行。

如果客户端改变了IP地址,服务器将会在几秒钟的时间内将新的数据发往新的IP地址。

为了功能实现,Mosh需要UDP数据报可以在服务器和客户端之间传送,默认的端口号在60000和61000之间,用户也可以通过-p选项指定。

建议
编译标志:Mosh是一个安全敏感的代码,当自动编译成二进制程序包时,我们建议在./configure中加上--enable-compile-warnings=error。在GNU/Linux中使用g++或者clang++编译时,应该明确加上-Werror,如果它不存在,请通知我们。

在可能的情况下,Mosh通过各种二进制硬化标志构建,比如-fstack-protector-all,-D_FORTIFY_SOURCE=2等,这样提供了主动的安全保护,避免在Mosh或者它引用的库中存在的内存污染,如果想要获得完整的标志列表,在configure.ac中搜索HARDEN。configure脚本可以检测你的编译器支持哪些标志,然后自动开启。如果想要禁用这个特性,将参数--disable-hardening传递给./configure。如果默认配置有问题,请通知我们,我们希望尽可能多的用户可以得到最安全的配置。

Mosh编译的时候默认优化等级为-O2,一些用户询问能否改成-Os,我们已经使用src/examples/benchmark来测试它,结果表明在GNU/Linux的g++ 4.6环境下,-O2比-Os快40%,在Mac OS X的clang++ 3.1环境下,-O2快16%。所以,虽然-Os编译后的程序小,但Mosh的CPU利用率不是特别高,用户没有输入的时候甚至是挂起的,我们觉得-O2是更好的选择。

更多的信息
Mosh主页
http://mosh.mit.edu/
mosh-devel@mit.edu邮件列表
http://mailman.mit.edu/mailman/listinfo/mosh-devel
mosh-users@mit.edu邮件列表
http://mailman.mit.edu/mailman/listinfo/mosh-users
在Freenode IRC上的频道
http://webchat.freenode.net/?channels=mosh

阅读原文 »

58 1 收藏


直接登录

推荐关注