SSH反向代理——让你的树莓派能够在任何地方访问

上周文章我们使用Go Module配置项目,做了一个基于gin的Hello World,今天我们把这个项目部署到树莓派上,作为我们的一个服务,这样带来了一个问题,树莓派一般在家里放着,我怎么能访问到呢?今天的文章就解决这个问题。

首先,我们编译一下上次的项目,使之能够在树莓派上运行,go build直接支持交叉编译,执行下面的命令

GOARCH=arm GOOS=linux go build main.go

在树莓派的/home/pi目录下创建一个test目录

cd ~
mkdir test

使用scp命令将编译出来的main传到树莓派上

scp main pi@树莓派IP:/home/pi/test

树莓派上运行main,启动服务,这样就可以通过树莓派的IP访问到服务了。先终止程序,接下来,我们编写一个服务文件,使这个服务作为系统服务启动。

[Unit]
Description=test api
Wants=network-online.target
After=network-online.target

[Service]
Restart=on-failure
RestartSec=5s
WorkingDirectory=/home/pi/test/
ExecStart=/home/pi/test/main

[Install]
WantedBy=multi-user.target

将该文件放在/etc/systemd/system目录下,命名为test.service,然后执行下面的命令

sudo systemctl daemon-reload
sudo systemctl enable test.service
sudo systemctl start test.service

服务就创建好了,而且可以自启动。可以尝试访问一下。可是,如果我在公司,想访问到这个服务,那该怎么办?更进一步,我希望ssh访问树莓派,又该怎么办?这时候可以使用ssh反向代理。关于反向代理的原理学习,可以看看这篇文章。下面我们开始实际操作,前提需要有一个性能不需要太好,网络带宽足够且可以公网访问或者具备域名的计算机或者树莓派。

首先登录这台公网可访问的机器,编辑/etc/ssh/sshd_config文件,修改

GatewayPorts yes

重启ssh服务

sudo systemctl restart sshd

然后ssh登录树莓派,安装autossh

sudo apt-get install autossh

编写一个autossh-tunnel.service文件,放在/etc/systemd/system

[Unit]
Description=AutoSSH tunnel service - SSH
After=network.target

[Service]
Environment="AUTOSSH_GATETIME=0"
ExecStart=/usr/bin/autossh -M 10030 -NR 18080:localhost:8080 -NR 10022:localhost:22 -p22 公网主机用户名@公网主机IP
User=pi

[Install]
WantedBy=multi-user.target

同样需要启动服务

sudo systemctl daemon-reload
sudo systemctl enable autossh-tunnel
sudo systemctl start autossh-tunnel

这样,通过公网主机就能访问到树莓派上8080端口的服务和ssh了。如果访问8080端口服务,可以使用

http://公网主机IP:18080/ping

如果访问ssh,可以使用命令

ssh pi@树莓派IP -p10022

ssh我们平时经常用,没想到它还有这样巧妙的功能,所以再小的再熟悉的事物,多去了解,都会有让我们惊艳的地方。

 

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页