树莓派以及ssh端口转发

前两天入手了一套树莓派Model 3B+,今天就讲讲拿到树莓派后首先做的几件事。因为早一天拿到了SD卡,所以树莓派到手并装上风扇外壳后就插入SD卡点亮开机。

开机

我烧录到SD卡的系统是从树莓派官网下载的RASPBIAN JESSIE LITE简装版(不带图形化界面)。因为没有连接显示器,所以就需要使用ssh来连接板子,这里碰到了踩的第一个坑,查了资料后发现,在某个版本更新后,官方因考虑安全性默认关闭了ssh服务,有一个方法就是将SD卡连到电脑,在根目录新建一个名为ssh的无后缀空文件,这样子就能在第一次成功ssh。同时用一根网线将板子与路由器连接,通过查看路由器后台获得它的IP,然后用ssh软件连接,账号为pi,密码为raspberry,默认端口为22。

ssh端口转发

连接上板子后,简单地进行了设置,包括连接了WiFi,安装了一些常用的软件后。问题也就随之而来,之前用于连接树莓派地IP是路由器分配的内网IP,而且一般家庭用户也没有公网IP(电信用户可以申请公网IP,因为很可能是动态IP,所以需要配合ddns服务来实现动态解析),因为我刚好有一个腾讯云的学生机,配有一个公网IP,再在网上了解到ssh这一神级软件具有远程转发,本地转发以及动态转发这三个功能。

简单介绍一下SSH端口转发的原理,因为在树莓派和腾讯云主机上都安装了SSH服务,所以可以通过SSH登陆,在两者的SSH客户端之间建立一个隧道,从而进行通信。

我们将远程主机腾讯云命名为T,本地的树莓派命名为P。

本地端口转发

概念:将发送到本地某一端口的网络请求,转发到远程主机的目标端口。

应用场景: 腾讯云主机T上端口3000运行了一个服务,本地树莓派P需要通过端口2000访问这一服务。

通过本地端口转发,就可以通过访问本地树莓派的2000端口,来访问云端主机端口3000的服务。

本地端口转发主要使用SSH的-L属性,语法格式如下:

-L 本地端口:远程主机地址:目标端口

结合该应用场景,我们只要输入:

ssh -L 2000:localhost:3000 root@www.96mhy.top

将本地树莓派P登陆远程主机T,并进行本地端口转发

提示输入密码后就可以连接到远程主机了。

远程端口转发

概念:将发送到远程某一端口的请求,转发到本地某一个目标端口。

应用场景:本地树莓派P上端口2000运行了某一服务,远程主机T需要通过端口3000访问这一服务。

通过远程端口转发,就可以通过访问远程主机的3000端口来访问本地树莓派的2000端口。

远程端口转发主要使用SSH的-R属性,语法格式如下:

-R 本地端口:本地树莓派地址:目标端口

结合该应用场景,我们只要输入:

ssh -R 3000:localhost:2000 root@www.96mhy.top

将本地树莓派P登陆远程主机T,并进行远程端口转发

提示输入密码后就可以连接到远程主机了。

动态端口转发

概念:前面提到的本地端口转发和远程端口转发,都是两个主机之间一一对应的端口之间的转发,而动态端口转发则只是固定一个本地端口,目标地址和目标端口则是可变的,这两个由本地主机发起的请求所决定。

应用场景:远程主机机T在多个不同的端口上运行了不同的服务,本地树莓派P要通过访问各个对应的端口来访问这些服务。

通过动态端口转发,可以将本地树莓派P发起的不同请求,转发到远程主机T的对应的端口。

动态端口转发主要使用SSH的-D属性,语法格式如下:

-D 本地树莓派地址:本地端口

结合该应用场景,我们只要输入:

ssh -D localhost:2000 root@www.96mhy.top

在树莓派P上登陆远程主机T,并进行动态端口转发

输入密码后即可连接至远程主机T。

在动态端口转发中,对于树莓派P发起的请求,一般可以采用Socket代理来转发到SSH所对应的端口上,这里不再展开叙述。配置完成后,发起的请求就都会转发到2000端口,再通过SSH转发到实际请求的地址。若远程主机处于真正的外网,就能够通过动态端口转发来科学上网。