思路
在局域网条件下,我们常用的ssh登录步骤为:
- 树莓派连接wifi
- 获取树莓派局域网IP地址
- 通过以Mobaxterm为代表的ssh连接工具登录树莓派终端
可是,在大多数场景下,我们并没办法给树莓派分配公网IP。因此,我们只能在该局域网条件下才能通过IP登录ssh终端,离开该局域网则该方法失效。
所以,远程ssh登录的原理,就是将位于局域网中的树莓派IP地址发布到公网环境下。
具体到技术细节,则是树莓派运行某数据转发程序,连接到一个位于公网的服务器A。通过该服务器A,将树莓派IP映射到公网某个域名下。使得在便捷地联网条件下,任何人都可通过该域名访问到树莓派。
这种方法,被称作内网穿透。
通过上面所述,核心重点是服务器A。所幸,市面有许多的厂商提供该种服务。国内比较知名的花生壳,国外有cpolar。
在本篇教程中,我们使用cpolar。它操作方便,搭建较为简单,适合快速上手使用。
环境要求
- 树莓派可以连通外部的网络
不知道该如何连通的,请私信
在树莓派上安装cpolar
首先,我们需要安装curl:
sudo apt-get install curl
然后安装cpolar:
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
通过指令确认cpolar安装成功:(若能正确查找到版本号,则说明安装成功)
cpolar version
设置为开机自启和守护进程运行模式:
sudo systemctl enable cpolar
sudo systemctl status cpolar
激活本地cpolar客户端
在树莓派上的cpolar安装成功后,我们就需要激活本地的cpolar客户端,即登录cpolar官网并进行简单注册后,取得唯一的cpolar口令码(只有进行注册,并以专属的口令码识别客户端,才能有效识别不同用户的隧道)
链接在此:
cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站
请注册登录并跳转至该界面:
复制该token口令码,在树莓派终端中运行以下代码:(xxxxxxxx替换为你的token)
cpolar authtoken xxxxxxxx
开机自启动隧道
在做完上述所有步骤后,你的cpolar已经配置得可以使用了。不过每次想远程连接前,都需要在终端输入命令cpolar tcp 22才能将ssh端口映射到公网上。这实属不便。
因此,我们要写一个脚本,在其中输入该命令,并设置该脚本开机自运行,那才叫大功告成。
在某个目录下,创建一个cpolar_start.sh文件:
(目录和sh脚本名称不重要,如果你跟我不一样,请注意自行修改之后的某些命令)
nano ~/Documents/cpolar_start.sh
chmod +x ~/Documents/cpolar_start.sh
并在文件中写入命令:
cpolar tcp 22
保存(ctrl+s)并退出(ctrl+x)。
树莓派推荐使用 crontab 作为自动任务管理器。在终端中运行crontab:
crontab -e
在弹出的窗口末尾,添加一行内容:
@reboot ~/Documents/cpolar_start.sh
保存退出,重启树莓派。
远程ssh登录
如果上面进行的都顺利,那么重启之后的树莓派(等待几十秒),会自动连接上wifi,并启动cpolar服务。
在该页面下,会出现树莓派ssh服务在公网的端口映射域名。
复制该域名:(示例)tcp://3.tcp.vip.cpolar.cn:12345
打开ssh登录软件(如Mobaxterm)
如果你的树莓派登录名为:rasspi
则在Remote host输入:rasspi@tcp://3.tcp.vip.cpolar.cn
Port输入:12345
点击确定,按要求输入密码,你就可以远程登录到树莓派终端了。
参考文献
内网穿透实现公网SSH远程连接树莓派 - cpolar 极点云官网