在实际使用过程中,树莓派使用4G模组连接网络之后,因为4G网络限制,无法使用SSH远程连接到设备;因此需要通过端口反向转发实现可远程SSH控制; 需要准备的材料:

准备材料

1、树莓派(已连接4G模块) 2、公网服务器(要求Linux系统)

将树莓派连接到局域网中

假设树莓派局域网IP地址为:192.168.1.2 假设公网服务器IP地址为:8.130.29.35

1、设置公网主机服务器支持端口转发

检查公网服务器是否支持端口转发

  1. sshd -T -C user=me,host=localhost,addr=IP | grep -E "gatewayports"

image.png
如上所示,公网服务器不支持端口转发,需要修改公网服务器支持端口转发

vim编辑/etc/ssh/sshd_config,打开GatewayPorts开关 GatewayPorts yes(如果是Ubuntu没有GatewayPorts, 添加一行即可)。重启网络服务sudo systemctl restart sshd

image.png

2、在树莓派上配置免密登陆远程服务器

这一步配置是为了方便将反向端口转发加到开机命令后,能够顺利创建

  1. ssh-keygen
  2. #持续三个回车即可,直至最终出现如下所示图片即可代表成功

image.png
接下来将密钥复制到远程服务器上

  1. #将密钥复制到公网服务器,要求输入公网服务器密码
  2. ssh-copy-id -i .ssh/id_rsa.pub root@8.130.29.35

image.png
此时,就可以在不输入密码的情况下,直接ssh连接远程服务器了;
image.png

3、在树莓派上安装autossh

autossh 可以自动的检测断线,并在断线的时候重连。

  1. sudo apt-get install autossh

接下来在树莓派上执行命令做端口反向转发

首先在云服务器控制台增加开放端口9091

在树莓派中执行以下命令

  1. autossh -M 4010 -fCNR 8.130.29.35:9091:localhost:22 root@8.130.29.35
  2. # 接着输入远程服务器密码即可


参数解释:**

-M 4010 意思是使用内网主机的 4010 端口监视 SSH 连接状态,连接出问题了会自动重连 -N 意思是不执行远程命令 -f 意思是后台执行命令 -R 意思是将远程主机(公网主机 )的某个端口转发到本地指定机器的指定端口

代码解释:

“8.130.29.35:9091:localhost:22”意思是将内网主机22号端口转发至公网主机的 9091 号端口上

此时,已经可以在公网主机上执行命令连接到树莓派上,如:

  1. ssh pi@localhost -P 9091

参数说明:-P 代表端口号

4、将端口转发添加到开机启动中

创建一个脚本sshjump.sh 来执行创建反向端口转发的命令,赋予脚本可执行权限,而后在rc.local中引入脚本开机执行

  1. touch sshjump.sh
  2. vim sshjump.sh
  3. #在sshjump.sh脚本中粘贴如下内容
  4. #!/bin/bash
  5. autossh -M 4010 -CNR 8.130.29.35:9091:localhost:22 root@8.130.29.35
  6. #保存

赋予脚本可执行权限

  1. chmond 777 sshjump.sh

切换root用户编辑rc.local

  1. su root
  2. #输入root用户密码
  3. vim /etc/rc.local
  4. #在文件倒数第二行加入以下内容
  5. su pi -c "exec /home/pi/Program/shell/sshjump.sh"
  6. #esc
  7. #:wq
  8. #保存文件并退出

5、测试

测试反向端口转发是否在设备重启后自动启动

测试步骤:

  1. 重启树莓派 sudo reboot
  2. 等待树莓派开机启动
  3. 连接公网服务器,如:ssh root@8.130.29.35
  4. 连接公网服务器后,执行命令连接树莓派: ssh -p 9091 pi@localhost
  5. 输入树莓派密码,检查是否能够正常连接

6、公网主机设置正向端口转发,支持本地直连树莓派

在公网服务器上设置正向端口转发,如下所示,将本地的9092端口转发到9091

  1. ssh -fCNL '*:9092:localhost:9091' localhost

在公网服务器上执行上述命令,输入密码之后,即可在本地访问公网服务器登陆树莓派

  1. ssh -P 9092 pi@8.130.29.35
  2. #连接9092端口,
  3. #pi 树莓派的用户名
  4. #8.130.29.35 公网服务器IP