**应用背景:**当有海外服务器维护需求的时候,常常会遇到使用ssh终端延时高并经常性假死的情况,非常影响维护效率。然后一个能缓解延时假死的小工具就是十分有用的,Mosh正是这样一个工具。Mosh是一个用于从客户端跨互联网连接远程服务器的命令行工具,程序最初由Keith Winstein 编写,用于类Unix的操作系统中,发布于GNU GPL V3协议下,基于UDP方式进行数据传输。

Mosh的优缺点:

优点: 1.回话保持(会话的中断不会导致当前正在前端执行的命令中断;会话在中断过后,会自动在当前会话重新连接) 2.基本支持全平台(Linux、FreeBSD、Solaris、Mac OS X和Android) 3.切换网络/暂时断网后回话自动连接

缺点: 1.需要开启额外UDP端口 2.在网络状况良好的状况下不宜使用 3.状态同步、维持心跳、协助预测的ACK包都增加了传输的数据量

Mosh Server安装配置

**Tips:**我的环境为aws的ec2,另外需要开放一些UDP端口,官方默认是让开60000-61000端口,生产环境下最好对端口进行更改

  • 安装环境依赖包
    1
    
    yum install -y autoconf automake libtool curl  make g++ unzip  zlib zlib-devel ncurses-devel openssl-devel
    
  • 安装protobuf的依赖
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    wget https://github.com/google/protobuf/releases/download/v3.3.0/protobuf-cpp-3.3.0.tar.gz
    tar xvf protobuf-cpp-3.3.0.tar.gz
    cd protobuf-cpp-3.3.0
    #./configure --prefix=/usr/local/protobuf
    ./configure – prefix=/usr – libdir=/usr/lib64
    make
    make check
    make install
    #echo "/usr/local/protobuf/lib/" >> /etc/ld.so.conf
    #ldconfig
    
  • 可能需要
    1
    2
    3
    
    #export LD_LIBRARY_PATH=/usr/local/protobuf/lib/
    #export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/protobuf/lib/
    #export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
    
  • 安装mosh
    1
    2
    3
    4
    5
    6
    7
    8
    
    wget https://mosh.org/mosh-1.3.0.tar.gz
    tar xvf mosh-1.3.0.tar.gz
    cd mosh-1.3.0
    ./autogen.sh
    ./configure  --prefix=/usr/local/mosh
    make
    make install
    export PATH=$PATH:/usr/local/mosh/bin/
    
  • 启动mosh server
    1
    2
    3
    4
    5
    6
    7
    
    # 启动进程
    /usr/local/bin/mosh-server
    #要确保mosh-server在用户的PATH中,不然连接不上
    # 查看进程是否正常
    ps axu | grep mosh
    #Auser  1866  0.0  0.0 163172  5900 ?        S    02:33   0:00 mosh-server new -c 256 -s -l LANG=zh_CN.UTF-8
    #Auser  2181  0.0  0.0 162612  5184 ?        S    03:25   0:00 mosh-server new -c 256 -s -l LANG=zh_CN.UTF-8
    

Mosh Clinet安装配置

支持全平台,我这是mac系统,所以就只写了mac的,如有需要在官方文档处进行查看,做对应的安装

  • MacOS客户端
    1
    
    brew install mobile-shell
    
  • 使用mosh连接服务器
    1
    2
    3
    
    #我这里是先将本地的公钥写到要连接服务器的authorized_keys文件中
    /usr/local/bin/mosh  --ssh="ssh -p 7777 " Auser@arvon.top
    #我这里由于ssh的默认端口更改了,所以需要指定端口7777
    

参考文档

Mosh官方介绍 Github项目Mosh BINSITE的blog