autossh实现树莓派内网穿透

在我写的另一片文章《使用ssh建立反向连接》实现了内网穿透,但连接在长时间不使用时会自动断开。 现在有一个更好的解决方案,使用autossh来实现一个不会断开的反向链接,实现内网穿透。

如何使用

首先在树莓派上安装autossh,命令是:

apt-get install autossh

安装完毕后,启动autossh,可以使用如下命令:

autossh -M 5678 -NR 1234:localhost:22 user@123.123.123.123 -p 222

参数解释:

参数“-M 5678”中,-M指定树莓派的监控端口,此处是5678。树莓派会定时检查该端口,如果不通则会重新发起连接。

命令“1234:localhost:22”中, 1234表示需要在远程主机上开启的端口,22表示本地的ssh端口。这个含义表示我们希望通过公网ip和1234端口访问树莓派的22端口。

user@123.123.123.123 -p222  user为公网机器上的用户,222为公网机器的ssh端口。

免密码登陆

通常情况,建立反向连接时需要登陆公网机器,此时需要输入密码。而开机自启动输入密码显然不现实。此时需要使用sshkey来实现免密码登录。

首先,在树莓派上生成sshkey,命令如下:

ssh-keygen -t rsa

由于我们不需要密码,所以一路回车即可。生成的id_rsa.pub文件在~/.ssh/文件夹里。然后我们将这个key推送到公网机器。命令如下:

ssh-copy-id -i ~/.ssh/id_rsa.pub 用户@主机地址 -p 端口/

开机自启动

为了使树莓派开启能够自动连接公网服务器,我们使用systemctl来注册一个能够开机自动启动的服务。

首先创建autossh.service,命令如下:

vim /lib/systemd/system/autossh.service

加入以下内容:

[Unit]
Description=Auto SSH Tunnel
After=network-online.target
[Service]
User=树莓派用户
Type=simple
ExecStart=/usr/bin/autossh -NR 在公网服务器开启的端口:本地ip地址:本地端口 -i 树莓派用户的id_rsa绝对路径 公网服务器用户@公网服务器ip地址 -p 公网服务器端口 >> /dev/null 2>&1
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -TERM $MAINPID
KillMode=process
Restart=no
[Install]
WantedBy=multi-user.target
WantedBy=graphical.target

创建完毕之后保存该文件。然后使用下面两条命令启动autossh并设置开机自启动。

systemctl enable autossh
systemctl start autossh

使用下面的命令查看autossh的运行状态:

systemctl status autossh
赞赏

微信赞赏支付宝赞赏

《autossh实现树莓派内网穿透》有1条评论

发表评论

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