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

配置免密登录,在树莓派上执行

ssh-copy-id -i .ssh/id_rsa.pub  用户名@公网服务器ID

编写一个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 -o "ServerAliveInterval=5" -o "ServerAliveCountMax=2" -o "ExitOnForwardFailure yes" -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我们平时经常用,没想到它还有这样巧妙的功能,所以再小的再熟悉的事物,多去了解,都会有让我们惊艳的地方。

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值