您的位置:首页 > 运维架构 > Linux

用树莓派学Linux(三)--------SSH端口转发,跳出局域网的树莓派控制

2018-07-05 18:44 155 查看

上一篇提到的通过SSH服务连接树莓派,是在局域网内实现的,并不能远程控制,比如树莓派在实验室,你用手机在4G网的环境下也需要操作树莓派,则需要考虑使用SSH服务的端口转发功能,实现真正的远程控制。本篇所介绍的内容,建立在你有一个公网IP的基础之上,远程控制的实质是,你从手机或笔记本电脑发出SSH指令到公网IP的指定端口上,公网IP把收到的内容转发到位于你实验室的局域网内的树莓派中。

首先介绍一下Linux命令行中SSH的相关参数

ssh -fCNRL -p
-f 后台执行指令
-C 压缩数据
-N 不执行远程指令
-R 反向代理,将远程主机的某个端口转发到本地端指定机器的指定端口
-L 正向代理,将本机的某个端口转发到远端指定机器的指定端口
-p 指定远程主机的端口
上面所说的正向代理与反向代理正好相反,正向代理是把自己主机上指定端口收到的信息,转发到远程主机的指定端口上,自己的主机做SSH服务的服务器,远程主机做SSH的客户端;反向代理是将远程主机的指定端口收到的信息,转发的自己主机的指定端口上,自己的主机做客户端,远程主机做服务器。当然,如果把远程主机的IP地址与端口号改为本机的ip与端口号,那实现的就是本机从端口到端口的转发。

接下介绍一下正向代理与反向代理的标准套路

正向代理:ssh -fCNL [本机IP(可省略)]:[本机端口]:[远程主机IP]:[远程主机端口] [登陆远程主机的用户名@远程主机IP]
反向代理:ssh -fCNR [远程主机IP(可省略)]:[远程主机端口]:[本机IP]:[本机端口] [登陆远程主机的用户名@远程主机IP]
基础知识讲完之后,我们以我们的树莓派为例,讲一下反向代理的SSH端口转发。

硬件准备
  • 树莓派 3b+ 通过路由器联网
  • 公网IP 166.166.166.166(买一个VPS就可以搞到一个公网IP)
软件准备
  • JuiceSSH(一款手机SSH客户端,用电脑连接的话,还是直接用putty就好了)
操作流程
  • 使用VPS的9999端口,将其接收到的信息转发到树莓派的20端口,登录树莓派命令终端,在树莓派上输入以下指令。当然这个操作会让你输远程主机的密码,否则随随便便别人就可拿你主机上某个端口做代理了
ssh -fCNR 9999:localhost:22 root@166.166.166.166

  • 此时你登录VPS查看端口使用情况时,会发现VPS的9999端口已经处在监听状态了,人品好的话,可能这一步就可以了,但在这基础上,有很多需要完善的地方。
  • 首先当出现网络波动时,ssh连接会中断,而Linux有一个autossh,是可以在中断后自动重连的,因此我们用autossh取代ssh的反向代理,不巧的是,树莓派上没有autossh,我们需要先安装
sudo apt-get install autossh
  • autossh指令与ssh指令谁分相似,我们只需要在树莓派命令行终端上输入以下指令即可完成上述的相同操作
autossh -M 9998 -fCNR 9999:localhost:22 root@166.166.166.166
  • 后面的指令都是完全一样的,只有一个 -M 9998 ,这个参数的意思是当9999端口彻底不能转发了,在VPS上再开一个9998端口转发。
  • 接着每次输入ssh或autossh指令后,都需要先输密码,我们需要先完成免密登录,这个之后我会单独开一篇详细讲,大致就是现在树莓派上生成一对密钥,把公钥存在树莓派上,把私钥拷贝到VPS上即可完成免密登录。
  • 再然后,有的VPS主机的防火墙写的非常好,防火墙可能会阻止我们负责端口转发的端口接收信息,因此还需要让防火墙允许指定端口接收信息,这一部分主要讲Linux的防火墙,这个之后我还会再开一篇再详细讲。
  • 最后,因为树莓派不像VPS一直开着机,每次关机后,端口会自动关闭,因此需要我们在树莓派中写一个开机就运行的小脚本,这一部分涉及Linux的自动化运维,systemctl,rc.local之类的,之前简书上看到一篇不错的文章,我学习之后也会详细写一篇类似的详细讲。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: