linux 下使用 autossh 对设备进行远程控制

最近在弄一个 openwrt 路由器,需求是远程对openwrt 路由器进行控制。
需要用到一台服务器,原理是在openwrt 路由器上安装autossh ,使用autossh 对服务器进行反向连接,便可通过服务器对openwrt 路由器进行远程控制。
为此在两台虚拟机上进行测试如下:

机器 主机名 ip
服务器 centOS 192.168.0.10
控制目标设备 kelong 192.168.0.102

这里写图片描述

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

autossh不再是预编译包,需从源码编译安装。依次运行
sudo apt-get install gcc make
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 [email protected] -p 22
上面几个参数的含义说明一下

-M 20000 这个表示是监控端口,检测到这个端口不通会重新连接

-NR 参照ssh参数(区分大小写):

反向代理 ssh -fCNR
正向代理 ssh -fCNL

-f 后台执行ssh指令
-C 允许压缩数据
-N 不执行远程指令
-R 将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口
-L 将本地机(客户机)的某个端口转发到远端指定机器的指定端口

1234:localhost:22 1234表示需要在服务器上使用的端口,22表示本地的ssh端口

[email protected] -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 [email protected] -p 22
之后建立反向连接就不需要密码了。
这里写图片描述
服务器(192.168.0.10)上保存密匙的地方~/.ssh/ (authorized_keys、known_hosts)
这里写图片描述

加入开机启动

(在虚拟机上开机启动不成功,是不是因为系统启动时,网络没有连接??在找答案)

vi /etc/rc.d/rc.local
(rc.local是给用户自定义启动时需要执行的文件。rc.local是Linux启动程序在login程序前执行的最后一个脚本,)

添加反向连接
autossh -M 20000 -fNR 1234:localhost:22 [email protected] -p 22

再输入 chmod +x /etc/rc.d/rc.local(重新赋予可执行权限)

这里写图片描述

之后执行reboot重启

测试前参考文章
https://blog.csdn.net/fanhenghui/article/details/51749970
http://imhuchao.com/872.html
https://www.cnblogs.com/kwongtai/p/6903420.html

猜你喜欢

转载自blog.csdn.net/weicy1510/article/details/81001817