传统的ssh最恼人的就是放着不动,没多久就丢了。有时候tail -f跟踪一个日志,一会日志没动静,可能ssh就已经阵亡了,而我还没反应过来,还琢磨着日志该出来了。烦。
前两天研究iTerm2的时候,看到有人分享mosh的相关知识,提到它最大的优点就是ssh保活。马上决定一试。

  1. 服务端安装

    yum install mosh
  2. 防火墙放行端口,端口从60000排队起步,根据同时可能产生的连接数量,适当放行几个就好

    firewall-cmd --add-port=60000-60010/udp --permanent
    firewall-cmd --reload
  3. 客户端同样安装mosh

    brew install mosh
  4. 客户端使用

    mosh -ssh="ssh -p 3322" root@192.168.0.88

    上面的-ssh命令主要是用在ssh端口不是开在22的情况下,需要指定端口。因为mosh自己的-p是指的mosh自身要用的udp端口。
    另外,如果你维护了~/.ssh/config文件的话,那么恭喜你,mosh可以直接读取这个config,也就是说,之前ssh a_server可以无缝替换成mosh a_server

  5. 排错,如果遇到客户端访问不了服务器,并且有如下提示

    locale: Cannot set LC_CTYPE to default locale: No such file or directory
    locale: Cannot set LC_ALL to default locale: No such file or directory
    ...
    ...
    Connection to xxx.xxx.xxx.xxx closed.
    /usr/local/bin/mosh: Did not find mosh server startup message. (Have you installed mosh on your server?)

    可以尝试在服务器上的~/.bashrc文件追加这两行解决

    export LANG=en_US.UTF-8
    export LC_ALL=en_US.UTF-8
  6. 最后说下实际体验感受
    的确大大延长了ssh的可用时间,但是像网上说的能坚持个个把月,很遗憾我并没有那么幸运,不过mosh仍然是个值得推荐的工具。