弱网终端替代工具Mosh

应用背景:当有海外服务器维护需求的时候,常常会遇到使用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
    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
    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
    # 启动进程
    /usr/local/bin/mosh-server
    # 查看进程是否正常
    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