linux 下使用 autossh 对设备进行远程控制(在虚拟机上做测试)

2019-07-13 09:07发布

class="markdown_views prism-tomorrow-night"> 最近在弄一个 openwrt 路由器,需求是远程对openwrt 路由器进行控制。
需要用到一台服务器,原理是在openwrt 路由器上安装autossh ,使用autossh 对服务器进行反向连接,便可通过服务器对openwrt 路由器进行远程控制。
为此在两台虚拟机上进行测试如下: 机器 主机名 ip 服务器 centOS 192.168.0.10 控制目标设备 kelong 192.168.0.102 这里写图片描述

首先在控制目标设备(kelong ) 上,安装autossh

autossh不再是预编译包,需从源码编译安装。依次运行 wget http://fossies.org/linux/privat/autossh-1.4e.tgz (下载autossh,如资源不可用,请自行查找)
tar -xf autossh-1.4e.tgz(解压)
cd autossh-1.4e (进入目录)
./configure
make
sudo make install

在控制目标设备(kelong )上,开启autossh 反向连接到服务器(192.168.0.10)

autossh -M 20000 -fNR 1234:localhost:22 root@192.168.0.10 -p 22
上面几个参数的含义说明一下 -M 20000 这个表示是监控端口,检测到这个端口不通会重新连接 -fNR 参照ssh参数(区分大小写):
反向代理 ssh -fCNR
正向代理 ssh -fCNL -f 后台执行ssh指令
-C 允许压缩数据
-N 不执行远程指令
-R 将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口
-L 将本地机(客户机)的某个端口转发到远端指定机器的指定端口
1234:localhost:22 1234表示需要在服务器上使用的端口,22表示本地的ssh端口(可以理解为服务器的1234端口映射到了本地的22端口)
root@192.168.0.10 -p 22 root为服务器上面的用户,-p 指定服务器的端口,22为服务器 ssh端口 这里写图片描述

在服务器(192.168.0.10)上连接到控制目标设备(kelong )

在服务器上连接到自身的1234端口,就可以控制目标设备(kelong )
ssh localhost -p1234
这里写图片描述

避免输入密码

如果不是用的sshkey,那么建立反向连接是需要输入密码的。为我们之后的加入开机启动带来了障碍。
生成sshkey
ssh-keygen -t rsa
由于我们不需要密码,所以一路回车,生成的id_rsa.pub文件在~/.ssh/文件夹里面。(id_rsa id_rsa.pub known_hosts)
这里写图片描述 之后就可以将这个key推送到服务器(192.168.0.10),使用如下命令进行推送
ssh-copy-id -i ~/.ssh/id_rsa.pub 服务器用户@服务器主机地址 -p 端口
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.10 -p 22
之后建立反向连接就不需要密码了。
这里写图片描述
服务器(192.168.0.10)上保存密匙的地方~/.ssh/ (authorized_keys、known_hosts)
这里写图片描述

加入开机启动

vi /etc/rc.d/rc.local 添加反向连接
autossh -M 20000 -fNR 1234:localhost:22 root@192.168.0.10 -p 22 再输入 chmod +x /etc/rc.d/rc.local(centos7之后,需要重新赋予可执行权限??不确定,因我使用的是centos6.9所以没有执行) 这里写图片描述 之后执行reboot重启,会发现机启动不成功,在这里也折腾了一下,
研究rc.local
rc.local是给用户自定义启动时需要执行的文件。rc.local是Linux启动程序在login程序前执行的最后一个脚本,注意 是 login前
查找 autossh 可执行文件,是在/usr/local/bin/autossh下面,是不是autossh可执行文件是属于usr的,未login前不能直接执行呢。那直接指定执行autossh的目录试试,添加反向连接修改为:
/usr/local/bin/autossh -M 20000 -fNR 1234:localhost:22 root@192.168.0.10 -p 22
这里写图片描述
重启发现成功了。确实是在login前就可以进行访问控制了。
这里写图片描述
这里写图片描述 全文完,仅为记录
测试前参考文章
https://blog.csdn.net/fanhenghui/article/details/51749970
http://imhuchao.com/872.html
https://www.cnblogs.com/kwongtai/p/6903420.html
http://www.cnblogs.com/eshizhan/archive/2012/07/16/2592902.html