树莓派学习(5)--使用ssh隧道连接

1、前言

在使用树莓派的时候,我们是经常将树莓派通过WiFi或者网线连接到家里的路由器中,但是这就会造成一个很大的困扰:但我们在外面的时候,想对家里的树莓派做一些骚操作的时候,往往不能够实现,因为树莓派并没有公网ip

要想在外面连接树莓派,我们主要有两种方法:一、端口映射 二、穿透

第一种方法要求我们的路由要有公网IP,一般的家用带宽都不会默认分配公网IP。需要你打电话去申请IP回退业务。本人家里的宽带是电信的,我打10000号,然后转工单,直接说申请公网IP就可以了。不过按网上许多人说,联通和移动的宽带很难申请公网IP。不过如果有钱的话,可以直接拉专线,直接解决问题

现在因为我在校,并不在家,所以主要使用第二种方法:穿透。当然穿透也分很多种。我们可以使用别人提供的软件来进行内网穿透,但现在我利用ssh隧道来实现树莓派的穿透。(此方法参考来自于linux系统)

环境:

树莓派端:raspbian,ssh端口是22,autossh软件

服务器端:centos7,ssh端口是1022,映射端口是20048

1、树莓派端生成ssh密钥对

红框部分为自己的邮箱

2、树莓派端将密钥上传到公网服务器端,此步需要输入公网服务端的ssh登陆密码

红框格式是:用户名@公网地址 -p 端口号
例子:ssh-copy-id root@120.34.43.43 -p 22

3、将公网服务器的 /etc/ssh/sshd_config中的Gateway项的注释删掉,并将no改成yes

4、在树莓派端安装autossh:sudo apt-get install autossh

树莓派端然后输入命令:
autossh -f -N -R 0.0.0.0:20048:0.0.0.0:22 root@120.xx.xx.xx -p 1022

5、然后开放端口服务器的端口:22001

打码区域为公网IP地址

6、测试在其他机器连接公网IP的22001端口

连接完成

7、将autossh设置为开机启动(假如是用户pi要远程登陆),将如下语句放进/etc/rc.local中

su pi -c "autossh -f -N -R 0.0.0.0:20048:0.0.0.0:22 root@120.79.220.182 -p 1022"

补充:8、一个下午过去了,发现出现了长时间保持如图的情况

连接不上

去网上查了一下原因:网络波动或者长时间连接使树莓派端和服务器端自动断开连接,我去树莓派端看了一下,发现对应autossh的程序还在运行。那么问题可能出现在服务器端,我重启了一下服务器端的sshd服务,发现又恢复了正常。

在网上找到两种方法,方法一是在autossh命令时增加一个端口用于ssh的检测并保持连接(下图命令中 -M参数),方法二是在两端sshd文件中修改ClientAliveInterval 和ClientAliveCountMax的参数,保持长时间的连接,并在60s内检测ssh连接状态,尝试重连12次后放弃连接。

方法一
方法二设置服务器端的/etc/ssh/sshd_config文件
方法二添加树莓派端的/etc/ssh/ssh_config文件

2019/4/9补充:在使用一段时间后,可用性根本是不可恭维。今天,在 查日志文件的时候,发现了原因,autossh在有会话保持的情况下,是会自动重连的,不过与ssh的keeplive机制有冲突,所以方法是调小clientAlive和serverAlive的值(如图二),这样,一旦因为网络波动而造成ssh隧道断开,双方能够及时释放对应的端口。

参考来源:

1、SSH端口转发:实现反向SSH隧道内网穿透

2、https://github.com/ma6174/blog/issues/7

3、 解决mac下ssh空闲一段时间自动断开的问题

发表评论

电子邮件地址不会被公开。 必填项已用*标注