May 30, 2020
By: Kevin

用了MOSH, SSH再也回不去了

  1. 简介
  2. ssh为啥有这些问题
  3. mosh
  4. 安装配置 & demo
  5. 安装
  6. 参考

用MOSH有几年了, 居然没有找到一份好的中文介绍(英文的似乎也不多)

简介

吐槽SSH就是对MOSH最好的介绍了.

SSH让人抓狂的几个点:

  1. 断网的时候(wifi切换/连VPN)ssh连接就死掉了, 再无重连的可能性.
  2. 网络很差的时候, 输入每个字符都需要服务器echo一下, 卡的时候10秒看到反馈再正常不过.
  3. 断了的时候起来的ssh为副进程的子进程会死.

希望有这么一个连接工具: 断网后可以重连,输入时候快捷迅速, 即使合上10小时, 坐飞机从纽约飞到北京, 开盖就可以连上, 里面所有的程序都还在.

对了, 这些功能MOSH都有.

ssh为啥有这些问题

  1. 基于连接TCP协议, connection断了, session也就断了, TCP是不可以漫游和换IP的.
  2. 双向传输对象是字符流, 只能到服务器拿到处理结果才能反馈, 你在vi里面按了个i, 确实只有服务器才知道你是模式切换还是输入字符i.
         +-----------------------+          +------------------------+
         |  app (eg. emacs)      |          | termial (eg. item2)    |
         +-----------------------+          +------------------------+
         |                       |          |                        |
         +-----------------------+          +------------------------+
                     ^                                   ^
                     |                                   |
                     |                                   |
                     |                                   |
                     v                                   v
         +-----------------------+          +------------------------+
         |       RSA + AES       |          |      RSA + AES         |
         +-----------------------+          +------------------------+
         |          TCP          |<-------->|           TCP          |
         +-----------------------+          +------------------------+

mosh

  1. 基于对象比较(可以diff和patch), 而不是字符流
  2. session的初始化(认证过程)基于ssh, 安全可靠
  3. 服务器端不需要运行任何特权代码, 也不需要预先启动任何服务. 只要安装mosh就可以mosh xxx@host 上去
  4. 数据传输依靠UDP, 路由根据客户端的最后发出的包重新建立, 很多时候都没有意识到漫游发生.
  5. 预判输入反馈(本地就处理了),平均输入反馈延时是ssh的1/100~1/4不等(根据网络状况)

              mosh-server                   mosh-client
        +-------------------+           +------------------+
        |  server app: emacs|           |term emulator:item|
        +-------------------+           +------------------+
        |  Pseudo-terminal  |           | Psesudo-terminal |
        +-------------------+           +-+------+---------+
        |                   |             |      | predict |
        | Mosh termial emul |             |      | -ive    |
        |                   |             +----->| echo    |
        +-------------------+                   ^+---------+
                 ^                              |
                 |                              |
                 v                              v
        +-------------------+          +-------------------+
        |       SSP         |          |        SSP        |
        +-------------------+          +-------------------+
        |     AES-OCB       |          |      AES-OCB      |
        +-------------------+          +-------------------+
        |       UDP         |<-------->|        UDP        |
        +-------------------+          +-------------------+

安装配置 & demo

安装

客户端和server端都装上.

各种系统的安装

不需要配置!

Mosh会通过ssh登陆到系统, 然后会打开一个60000~61000的端口进行通讯, 如果ssh端口不是22, 需要指定下ssh端口

mosh --ssh="ssh -p 2222" figrindan

演示了:

  1. ssh和mosh连接同一个终端
  2. 切换为vpn的时候左边的ssh断连
  3. 右面的mosh切换网络不会断掉
  4. 注意mosh输入的时候会在本地做echo prediction, 下划线的字符是mosh本地echo的, 非常顺畅,几乎无延时.

asciicast

参考

  1. mosh
Tags: 工具