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