zoukankan      html  css  js  c++  java
  • mosh基于udp的ssh 安装和使用

    Mosh

    0x01 介绍mosh

    Mosh表示移动Shell(Mobile Shell),是一个用于从客户端跨互联网连接远程服务器的命令行工具。它能用于SSH连接,但是比Secure Shell功能更多。它是一个类似于SSH而带有更多功能的应用。程序最初由Keith Winstein 编写,用于类Unix的操作系统中,发布于GNU GPL V3协议下。

    Mosh最大的特点是基于UDP方式传输,支持在服务端创建一个临时的Key供客户端一次性连接,退出后失效;也支持通过SSH的配置进行认证,但数据传输本身还是自身的UDP方式。

    另外,Mosh还有两个我觉得非常有用的功能

    • 会话的中断不会导致当前正在前端执行的命令中断,相当于你所有的操作都是在screen命令中一样在后台执行。
    • 会话在中断过后,不会立刻退出,而是启用一个计时器,当网络恢复后会自动重新连接,同时会延续之前的会话,不会重新开启一个。

    Mosh的功能

    • 它是一个支持漫游的远程终端程序
    • 在所有主流的类 Unix 版本中可用,如 Linux、FreeBSD、Solaris、Mac OS X和Android
    • 支持不稳定连接
    • 支持智能的本地回显
    • 支持用户输入的行编辑
    • 响应式设计及在 wifi、3G、长距离连接下的鲁棒性
    • 在IP改变后保持连接。它使用UDP代替TCP(在SSH中使用),当连接被重置或者获得新的IP后TCP会超时,但是UDP仍然保持连接
    • 在很长的时候之后恢复会话时仍然保持连接
    • 没有网络延迟。立即显示用户输入和删除而没有延迟
    • 像SSH那样支持一些旧的方式登录
    • 包丢失处理机制

    0x02 安装mosh

    • centos7 上安装

      yum install mosh

    • deepin debian ubuntu 上安装

      apt-get install mosh

    • 源码安装

    $ git clone https://github.com/mobile-shell/mosh
    $ cd mosh
    $ ./autogen.sh
    $ ./configure
    $ make
    # make install
    

    0x03 防火墙设置

    要在服务器的防火墙上面设置开启 60000 到 61000 upd 端口。mosh 不安全的一点就在于这里它服务端的端口是固定的这个范围。默认是从 60000 开始然后 +1 的增加。比如第一个连接是 60001,这个连接没断后面就会是 60002 端口连接,以此类推。

    现在开始设置服务端防火墙

    如果是 iptables

    sudo iptables -I INPUT 1 -p udp --dport 60000:61000 -j ACCEPT
    

    如果是 ufw

    sudo ufw allow 60000:61000/udp
    

    我的是 firewalld

    # 先确定活动区域
    [root@ivoivo ~]# firewall-cmd --get-active-zones
    public
      interfaces: eth0
    
    # 编辑防火墙规则
    [root@ivoivo ~]# firewall-cmd --permanent --zone=public --add-port=60000-61000/udp
    
    # 让防火墙生效
    [root@ivoivo ~]# firewall-cmd --reload
    

    0x04 使用MOSH

    采用临时key一次性认证

    • 采用临时Key的方式进行一次性认证

    先需要在服务端创建Key,然后客户端通过这个Key进行登录,该Key会在会话结束十分钟后自动失效。

    创建一个临时的Key和端口供Client登录

    $ mosh-server
    
    MOSH CONNECT 60001 S7KI+lnT56j4efWRhMc23g
    
    mosh-server (mosh 1.3.2) [build mosh 1.3.2]
    Copyright 2012 Keith Winstein <mosh-devel@mit.edu>
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    
    [mosh-server detached, pid = 141741]
    
    

    定义好MOSH_KEY的值

    $ export MOSH_KEY=S7KI+lnT56j4efWRhMc23g
    

    使用临时Key进行登陆

    $ mosh-client 10.1.1.1 60001
    $ exit
    logout
    [mosh is exiting.]
    

    注:mosh-client后面只能跟服务器具体的IP地址和临时端口,不支持主机名或域名方式

    假设服务器地址为 10.1.1.1

    ssh 私钥存放在 /root/.ssh/id_rsa

    • 没有更改ssh 22 端口的用法
    mosh root@10.1.1.1
    
    • 没有更改ssh 22 端口,但是想用服务端某个特定的端口
      这种情况是在防火墙上面只开启了 60000-61000 中间的 1 个或几个端口比如只开启了 60010 这一个端口,那么用的时候在客户端上后面要加 -p 的参数
    mosh -p 60010 root@10.1.1.1
    
    • 如果改动过ssh端口 22 改为 2500
    mosh --ssh="ssh -p 2500" root@10.1.1.1
    
    • 如果改动过ssh端口 22 改为2500还要用服务端 60010 udp 端口
    mosh -p 60010 --ssh="ssh -p 2500" root@10.1.1.1
    
    • 不用密码使用的秘钥登录
    mosh --ssh="/usr/bin/ssh -i /root/.ssh/id_rsa" root@10.1.1.1
    
    • 不用密码使用的秘钥登录,改 22 为 2500
    mosh --ssh="/usr/bin/ssh -i /root/.ssh/id_rsa -p 2500" root@10.1.1.1
    
    • 不用密码使用的秘钥登录,改 22 为 9999,且使用服务端 60010 udp 端口
    mosh -p 60010 --ssh="/usr/bin/ssh -i /root/.ssh/id_rsa -p 2500" root@10.1.1.1
    

    utf-8编码问题,解决方案

    In my case, put these lines in ~/.bashrc
    (both on server and local machine)

    export LC_ALL=en_US.UTF-8
    export LANG=en_US.UTF-8
    export LANGUAGE=en_US.UTF-8
    

    Edit: recently, when I try on another machine, I have to put those line in ~/.profile. So, you should try with ~/.bashrc and ~/.profile

    引用

    https://mosh.org/

    https://www.hi-linux.com/posts/23118.html

  • 相关阅读:
    【NOI2008】志愿者招募
    【2010国家集训队】人员雇佣
    html5手机移动端三级联动城市选择器
    WebSocket实现简单的在线聊天
    游戏开发完整学习路线(各个版本都有)
    vs下开发windows服务程序
    解决Firefox下,页面元素不刷新问题
    C# JObject和JArray 的分享
    jQuery如何改变css伪元素样式
    safari 浏览器window.history.go(-1)运行无效解决办法
  • 原文地址:https://www.cnblogs.com/lovesKey/p/12323517.html
Copyright © 2011-2022 走看看