Mosh表示移动Shell(Mobile Shell),是一个用于从客户端跨互联网连接远程服务器的命令行工具。它能用于SSH连接,但是比Secure Shell功能更多。它是一个类似于SSH而带有更多功能的应用。程序最初由Keith Winstein 编写,用于类Unix的操作系统中,发布于GNU GPL V3协议下。
Mosh最大的特点是基于UDP方式传输,支持在服务端创建一个临时的Key供客户端一次性连接,退出后失效;也支持通过SSH的配置进行认证,但数据传输本身还是自身的UDP方式。
另外,Mosh还有两个我觉得非常有用的功能
Mosh需要同时在服务器端与客户端上安装,这是一件非常简单的事情。
1 2 | $ apt – get update $ apt – get install mosh |
1 2 | $ yum update $ yum install mosh |
1 | $ dnf install mosh |
1 2 | $ brew install mosh $ brew install — HEAD mosh #安装git最新版本 |
注:目前Mosh的最新版本是1.2.4,这个版本有一个小问题就是不会汇报鼠标事件,如果你在远程的VIM或者tmux等支持鼠标事件的程序中喜欢用滚轮或者触摸屏滚动屏幕的话,可能会有点不习惯。如果不能忍可以自己编译安装Git里的最新版本的Mosh。
1 2 3 4 5 6 | $ 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会话。
1 | exit |
Mosh支持很多选项,你可以用下面的方法看到
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | $ 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 |
Mosh使用的UDP协议连接的,使用的端口是从60000到61000,如果开启了防火墙服务器上就需要打开相应的UDP端口。一个Mosh连接就会打开一个UDP端口,比如建立两个连接就是60001、60002,以此类推。
假设Mosh使用60001 UDP端口,则在服务器上运行
1 | $ iptables – I INPUT – p udp — dport 60001 – j ACCEPT |
这样就在服务器上打开60001这个UDP端口。当然,最好是把上一条命令写入服务器iptables的规则中,这样不必要每次都手动打开这个端口。
1 | $ mosh USERNAME @ IP |
客户端进行连接时指定端口并开启端口,默认端口从60001开始开启。接下来就是从客户端连接,如下:
1 2 | # 如果原来连接服务器是采用密码的方式登录,会提示输入密码,如果ssh已经做好了密钥认证,则可以直接连接 $ mosh – p 60001 用户名 @ ip地址 |
注:p参数用于指定UDP端口。
假如你的SSH连接设置公钥/私钥连接,比如ssh hi-linux
即可直接连接服务器而无需输入密码,则mosh命令也可以以mosh hi-linux
的形式连接,基本上,可以把它当作ssh命令的替换,只不过SSH开的是TCP口,Mosh开的是UDP口。
1 2 3 4 | $ mosh mike @ hi – linux . com $ exit logout [ mosh is exiting . ] |
假设服务端开始的端口是2222
1 | $ mosh — ssh = “ssh -p 2222” 用户 @服务器 IP |
1 | $ mosh — ssh = “~/bin/ssh -i ./identity” 用户 @服务器 IP |
--ssh
参数的方式1 | $ mosh — ssh = “ssh -i /home/dong.guo/.ssh/oozie -p 2222” |
先需要在服务端创建Key,然后客户端通过这个Key进行登录,该Key会在会话结束十分钟后自动失效。
创建一个临时的Key和端口供Client登录
1 2 3 4 5 6 7 8 | $ 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的值
1 | $ export MOSH_KEY = hNpGrd5rzRrfP47LQEizJw |
使用临时Key进行登陆
1 2 3 4 | $ mosh – client 192.168.92.128 60001 $ exit logout [ mosh is exiting . ] |
注:mosh-client后面只能跟服务器具体的IP地址和临时端口,不支持主机名或域名方式
Mosh是一款在大多数linux发行版的仓库中可以下载的一款小工具。虽然它有一些差异尤其是安全问题和额外的需求,它的功能,比如漫游后保持连接是一个加分点。我的建议是任何一个使用SSH的Linux用户都应该试试这个程序,Mosh值得一试。
Mosh的优缺点
文章转载来自:trustauth.cn
上一篇:wordpress程序后台左侧栏目顶部系统自带logo如何快速去除呢?
下一篇:MySQL管理工具MySQL Utilities — 查询更新失败的记录(18)