0x00 介绍
ssh 用的是 tcp 协议来进行传输的,每个操作都要交互。对于高延迟高丢包的 vps 服务器来说就变得非常的不合适了,这里今天介绍一个用 udp 来实现的 ssh mosh。这里 mosh 必须在服务端与客户端都要安装才可以正常使用,还要在服务端开启一些 udp 端口。
0x01 环境
服务器系统:Centos 7
服务器防火墙: firewalld
客户端系统:deepin 15.10.1
0x02 安装mosh
需要在vps以及本机上都安装mosh
yum install mosh
# centos7 上安装
apt-get install mosh
# deepin debian ubuntu上面安装
也可以源码安装
$ 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 使用说明
假设服务器地址为 192.168.99.99
ssh 私钥存放在 /home/ivo/.ssh/id_rsa
- 没有更改ssh 22 端口的用法
mosh root@192.168.99.99
- 没有更改ssh 22 端口,但是想用服务端某个特定的端口
这种情况是在防火墙上面只开启了 60000-61000 中间的 1 个或几个端口比如只开启了 60010 这一个端口,那么用的时候在客户端上后面要加 -p 的参数
mosh -p 60010 root@192.168.99.99
- 如果改动过ssh端口 22 改为 9999
mosh --ssh="ssh -p 9999" root@192.168.99.99
- 如果改动过ssh端口 22 改为9999 还要用服务端 60010 udp 端口
mosh -p 60010 --ssh="ssh -p 9999" root@192.168.99.99
- 不用密码使用的秘钥登录
mosh --ssh="/usr/bin/ssh -i /home/ivo/.ssh/id_rsa" root@192.168.99.99
- 不用密码使用的秘钥登录,改 22 为 9999
mosh --ssh="/usr/bin/ssh -i /home/ivo/.ssh/id_rsa -p 9999" root@192.168.99.99
- 不用密码使用的秘钥登录,改 22 为 9999,且使用服务端 60010 udp 端口
mosh -p 60010 --ssh="/usr/bin/ssh -i /home/ivo/.ssh/id_rsa -p 9999" root@192.168.99.99