使用 Mosh 来优化 SSH 连接
1.什么是Mosh
Mosh表示移动Shell(Mobile Shell),是一个用于从客户端跨互联网连接远程服务器的命令行工具。它能用于SSH连接,但是比Secure Shell功能更多。它是一个类似于SSH而带有更多功能的应用。程序最初由Keith Winstein 编写,用于类Unix的操作系统中,发布于GNU GPL V3协议下。
Mosh最大的特点是基于UDP方式传输,支持在服务端创建一个临时的Key供客户端一次性连接,退出后失效;也支持通过SSH的配置进行认证,但数据传输本身还是自身的UDP方式。
另外,Mosh还有两个我觉得非常有用的功能
- 会话的中断不会导致当前正在前端执行的命令中断,相当于你所有的操作都是在screen命令中一样在后台执行。
- 会话在中断过后,不会立刻退出,而是启用一个计时器,当网络恢复后会自动重新连接,同时会延续之前的会话,不会重新开启一个。
2.Mosh的功能
- 它是一个支持漫游的远程终端程序
- 在所有主流的类 Unix 版本中可用,如 Linux、FreeBSD、Solaris、Mac OS X和Android
- 支持不稳定连接
- 支持智能的本地回显
- 支持用户输入的行编辑
- 响应式设计及在 wifi、3G、长距离连接下的鲁棒性
- 在IP改变后保持连接。它使用UDP代替TCP(在SSH中使用),当连接被重置或者获得新的IP后TCP会超时,但是UDP仍然保持连接
- 在很长的时候之后恢复会话时仍然保持连接
- 没有网络延迟。立即显示用户输入和删除而没有延迟
- 像SSH那样支持一些旧的方式登录
- 包丢失处理机制
3.Mosh安装配置
Mosh需要同时在服务器端与客户端上安装,这是一件非常简单的事情。
Linux中安装Mosh
- 在Debian、Ubuntu 和Mint 类似的系统中,你可以很容易地用apt-get包管理器安装。
$ apt-get update
$ apt-get install mosh
- 在基于RHEL/CentOS/Fedora的系统中,要使用yum包管理器安装mosh,你需要打开第三方的EPEL。
$ yum update
$ yum install mosh
- 在Fedora 22+的版本中,你需要使用dnf包管理器来安装Mosh。
$ dnf install mosh
MAC中安装Mosh
$ brew install mosh
$ brew install --HEAD mosh #安装git最新版本
注:目前Mosh的最新版本是1.2.4,这个版本有一个小问题就是不会汇报鼠标事件,如果你在远程的VIM或者tmux等支持鼠标事件的程序中喜欢用滚轮或者触摸屏滚动屏幕的话,可能会有点不习惯。如果不能忍可以自己编译安装Git里的最新版本的Mosh。
检查Mosh的版本
$ mosh --version
mosh 1.2.4
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.
你可以输入exit来退出Mosh会话。
$ exit
4.Mosh参数说明
Mosh支持很多选项,你可以用下面的方法看到
$ mosh --help
Usage: /usr/bin/mosh [options] [--] [user@]host [command...]
--client=PATH mosh client on local machine
(default: "mosh-client")
--server=COMMAND mosh server on remote machine
(default: "mosh-server") --predict=adaptive local echo for slower links [default]
-a --predict=always use local echo even on fast links
-n --predict=never never use local echo
--predict=experimental aggressively echo even when incorrect -p PORT[:PORT2]
--port=PORT[:PORT2] server-side UDP port or range --ssh=COMMAND ssh command to run when setting up session
(example: "ssh -p 2222")
(default: "ssh") --no-init do not send terminal initialization string --help this message
--version version and copyright information Please report bugs to mosh-devel@mit.edu.
Mosh home page: http://mosh.mit.edu
5.Mosh远程连接
Mosh使用的UDP协议连接的,使用的端口是从60000到61000,如果开启了防火墙服务器上就需要打开相应的UDP端口。一个Mosh连接就会打开一个UDP端口,比如建立两个连接就是60001、60002,以此类推。
假设Mosh使用60001 UDP端口,则在服务器上运行
iptables -I INPUT -p udp --dport 60001 -j ACCEPT
这样就在服务器上打开60001这个UDP端口。当然,最好是把上一条命令写入服务器iptables的规则中,这样不必要每次都手动打开这个端口。
Mosh的使用
- 使用Mosh登录远程Linux服务器
$ mosh USERNAME@IP
- 指定开启的端口
客户端进行连接时指定端口并开启端口,默认端口从60001开始开启。接下来就是从客户端连接,如下:
# 如果原来连接服务器是采用密码的方式登录,会提示输入密码,如果ssh已经做好了密钥认证,则可以直接连接
$ mosh -p 60001 用户名@ip地址
注:p参数用于指定UDP端口。
- 采用SSH配置进行认证
假如你的SSH连接设置公钥/私钥连接,比如ssh hi-linux即可直接连接服务器而无需输入密码,则mosh命令也可以以mosh hi-linux的形式连接,基本上,可以把它当作ssh命令的替换,只不过SSH开的是TCP口,Mosh开的是UDP口。
$ mosh mike@hi-linux.com
$ exit
logout
[mosh is exiting.]
- 指定服务端SSH开启的端口
假设服务端开始的端口是2222
$ mosh --ssh="ssh -p 2222" 用户@服务器IP
- 如果私钥不在默认的目录
$ mosh --ssh="~/bin/ssh -i ./identity" 用户@服务器IP
- 如果服务端修改过SSH的端口,或需要指定单独的SSHKEY,可以通过
--ssh参数的方式
$ mosh --ssh="ssh -i /home/dong.guo/.ssh/oozie -p 2222"
- 采用临时Key的方式进行一次性认证
先需要在服务端创建Key,然后客户端通过这个Key进行登录,该Key会在会话结束十分钟后自动失效。
创建一个临时的Key和端口供Client登录
$ mosh-server MOSH CONNECT 60001 hNpGrd5rzRrfP47LQEizJw
mosh-server (mosh 1.2.4)
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 = 27290]
定义好MOSH_KEY的值
$ export MOSH_KEY=hNpGrd5rzRrfP47LQEizJw
使用临时Key进行登陆
$ mosh-client 192.168.92.128 60001
$ exit
logout
[mosh is exiting.]
注:mosh-client后面只能跟服务器具体的IP地址和临时端口,不支持主机名或域名方式
6.总结
Mosh是一款在大多数linux发行版的仓库中可以下载的一款小工具。虽然它有一些差异尤其是安全问题和额外的需求,它的功能,比如漫游后保持连接是一个加分点。我的建议是任何一个使用SSH的Linux用户都应该试试这个程序,Mosh值得一试。
Mosh的优缺点
- Mosh有额外的需求,比如需要允许UDP 直接连接,这在SSH不需要。
- 动态分配的端口范围是60000-61000。第一个打开的端口是分配好的。每个连接都需要一个端口。
- 默认的端口分配是一个严重的安全问题,尤其是在生产环境中。
- 支持IPv6连接,但是不支持IPv6漫游。
- 不支持回滚。
- 不支持X11转发。
- 不支持ssh-agent转发。
使用 Mosh 来优化 SSH 连接的更多相关文章
- Linux优化远程SSH连接
优化远程SSH连接 1.Linxu和Window的ssh连接区别 Windom默认3389端口,管理员administartor 普通是guest Linux 默认22端口 管理员root 普通一堆 ...
- Linux实战教学笔记24:SSH连接原理及ssh-key
目录 第二十四节 SSH连接原理及ssh-key讲解 第1章 SSH服务 1.1 ssh介绍 1.2 知识小结 第2章 ssh结构 2.1 SSH加密技术 第3章 ssh服务认证类型 3.1 基于口令 ...
- 使用Termux并与ubuntu建立ssh连接
什么是Termux? Termux是一个Android终端仿真器和Linux环境应用程序,直接工作,无需根目录或设置.一个最小的基本系统被自动安装-额外的软件包可以使用APT软件包管理器来使用.不需要 ...
- 使用并发 ssh 连接来提升捞日志脚本执行效率
问题背景 公司有个简单粗暴的日志服务,它部署在多台机器实例上,收集的日志记录在每台机器本地硬盘,写一个小时自动切换日志文件,硬盘空间写满了自动回卷,大约可以保存两三天的历史数据.为什么说它粗暴呢?原来 ...
- Linux实战教学笔记05:远程SSH连接服务与基本排错(新手扫盲篇)
第五节 远程SSH连接服务与基本排错 标签(空格分隔):Linux实战教学笔记-陈思齐 第1章 远程连接LInux系统管理 1.1 为什么要远程连接Linux系统 在实际的工作场景中,虚拟机界面或物理 ...
- 树莓派3B的食用方法-1(装系统 网线ssh连接)
首先要有一个树莓派3B , 在某宝买就行, 这东西基本上找到假货都难,另外国产和英国也没什么差别,差不多哪个便宜买哪个就行. 不要买店家的套餐,一个是配的东西有些不需要,有的质量也不好. 提示:除了G ...
- REDHAT一总复习1 ssh配置 禁用root用户SSH连接
生成SSH公钥 $ ssh-keygen 生成的公钥安装到指定的服务器上,这里安装到desktop0上的student账户 $ ssh-copy-id desktop0 $ su - 禁用root用户 ...
- 虚拟机利用Host-only实现在不插网线的情况下,虚拟机与主机实现双向通信,实现ssh连接以及samba服务实现共享
为了不影响其他的虚拟网卡,我们在VMware下在添加一块虚拟网卡: 然后点击Next,选择连接方式: 点击Finish即可. 重新启动虚拟机,如果这是你手动添加的第一块虚拟网卡,那么应该是eth1. ...
- ssh连接失败,排错经验
一.场景描述 ssh连接服务器,发现连接失败,但是对应服务器的ip能够ping通. 场景: [root@yl-web ~]# ssh root@10.1.101.35 ssh_exchange_ide ...
随机推荐
- Mybatis的介绍和基本使用
巨人的肩膀 Mybatis的介绍和基本使用(1) (qq.com) Mybatis SQL映射文件详解(2) (qq.com)
- Python实例:贪吃蛇(简单贪吃蛇编写)🐍
d=====( ̄▽ ̄*)b 叮~ Python -- 简易贪吃蛇实现 目录: 1.基本原理 2.需要学习的库 3.代码实现 1.基本原理 基本贪吃蛇所需要的东西其实很少,只需要有一块让蛇动的屏幕, 在 ...
- 入门pwn的练习
都是比较简单的一些pwn的题目,也是团队里面的一个人发着做的,因为是初学,所以就还是先从简单的向难得方向去发展. 第一个 先用checksec或者die检测一下, 然后拖入到IDA,shift+f12 ...
- C#10 新功能
C# 10.0 向 C# 语言添加了以下功能和增强功能: 记录结构 结构类型的改进 可使用 const 内插字符串 内插字符串处理程序 global using 指令 文件范围的命名空间声明 扩展属性 ...
- 图解CPU缓存一致性问题
产生背景 CPU的读取速度比内存的快,一个快一个慢,就会有矛盾,就会有人想要解决这个矛盾,所以就提出多级缓存来解决,如下图所示. L1级缓存:分为数据域和程序域. L2级缓存:二级缓存. L3级缓存 ...
- 该懂的知识-CPU
进程也好,线程也好,最后都是转换成CPU指令由CPU执行的,所有的CPU指令都需要执行时间,多一个CP,就能够同时执行很多指令.不论如何模拟,最终CPU指令都必须在某一个内核上执行. CPU的工作是不 ...
- Python:输入关键字进行百度搜索并爬取搜索结果
学习自:手把手教你用Python爬取百度搜索结果并保存 - 云+社区 - 腾讯云 如何利用python模拟百度搜索,Python交流,技术交流区,鱼C论坛 指定关键字,对其进行百度搜索,保存搜索结果, ...
- Python3中__repr__和__str__区别
示例: class Test(object): def __init__(self, value='hello, world!'): self.data = value >>> t ...
- (七)目标检测算法之SSD
系列博客链接: (一)目标检测概述 https://www.cnblogs.com/kongweisi/p/10894415.html (二)目标检测算法之R-CNN https://www.cnbl ...
- 矩池云 | 利用LSTM框架实时预测比特币价格
温馨提示:本案例只作为学习研究用途,不构成投资建议. 比特币的价格数据是基于时间序列的,因此比特币的价格预测大多采用LSTM模型来实现. 长期短期记忆(LSTM)是一种特别适用于时间序列数据(或具有时 ...