作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载。

给树莓派连上显示器和键盘鼠标,就可以像使用一台电脑一样使用它了。但很多时候,我们是把体积小巧的树莓派当做一个便携设备来使用的。这种时候,用户可不希望随身带着体积庞大的鼠标、键盘和显示器。如果能用手中的电脑直接连接树莓派,然后用该电脑的输入输出设备来操纵树莓派电脑,就可以省去很多不必要的麻烦。除此之外,树莓派在物联网情境下的应用,也离不开多样的远程连接方式。

局域网SSH登陆

常见的家庭或办公网络都是以一个WiFi路由器为中心的。这种局域网场景下,可以很容易的用SSH的方式来远程登陆树莓派。SSH是用于远程服务器管理的加密协议。SSH分为服务器和客户端两端。树莓派将作为服务器端,而同一局域网下的另一台电脑可以作为客户端。客户端成功登陆之后,我们可以从客户端用命令行的方式来远程操作服务器端。

首先,我们需要开启树莓派上的SSH服务器。树莓派已经预装好了SSH服务器,我们只需要进入树莓派的设置页面开启就可以。从终端用命令行进入设置页面:

sudo raspi-config

然后在"5 Interfacing Options" -> "P2 SSH"中打开SSH服务器:

为了远程连接,我们必须知道树莓派的IP地址。在树莓派上,我们可以用ifconfig命令来找到树莓派的IP地址:

ifconfig

从ifconfig的输出中找到树莓派在局域网中的IP地址。比如ifconfig输出中给出了对应WiFi连接的wlan0端口地址为192.168.1.101。这个时候,就可以用同一局域网下的其他电脑来登录树莓派了。我们需要用这台电脑上的SSH客户端,比如说用UNIX下的ssh命令:

ssh pi@192.168.1.101

输入用户pi的密码,就可以远程登录到树莓派上。其实使用SSH客户端时,除了说明树莓派的IP地址,还需要一个端口号。在省略端口号时,客户端默认为端口22。在Windows下,可以使用PuTTy这样的SSH客户端软件。

Bonjour

但在上面的过程中,我们必须从树莓派本地运行ifconfig来查找它的IP地址,给远程登陆增加了不必要的麻烦。我们可以用局域网扫描工具来找到树莓派的IP地址。UNIX系统下提供了arp命令行工具,通过ARP协议来找到局域网下所有设备的MAC地址和对应的IP地址。此外,在不同的平台下也有很多图形化的局域网扫描软件,例如IPhone上的Fing、Mac OSX下的LanScan、跨平台的Angry IP Scanner,都可以帮助你列出同一局域网下所有设备的MAC地址和对应的IP。此外,你还可以登录路由器的管理页面。很多路由器都会列出连接设备及其IP。当然,通过这种方式得到的IP是一个列表,还要从中筛选出目标IP。如果局域网下设备较多,其过程还是比较痛苦。

更方便的,树莓派提供了对Bonjour的支持。Bonjour用于自动发现网络上的设备,可以实现局域网上的自动域名解析。在同一局域网下,可以用主机名.local的形式,找到对应的IP地址。由于树莓派的默认主机名是raspberrypi,因此可以用raspberrypi.local来登陆到树莓派:

ssh pi@raspberrypi.local

如果局域网内有多个以raspberrypi为名的主机,那么Bonjour将依次把它们称呼为:

raspberrypi
raspberryipi-2
raspberryipi-3
...

为了彻底避免主机名的冲突,你还可以重新命名树莓派的主机名。在raspi-config的设置页面中,选择"7 Advanced Options"->"A2 Hostname",更改主机名再重新启动树莓派,就能以新的主机名来进行Bonjour寻址。需要注意的是,Windows系统并没有自带对Bonjour的支持。你可以通过下载安装iTunes或"Bonjour Print Services for Windows"来获得Bonjour功能。

Bonjour给设备了提供了一个动态域名,用于对应该设备的IP地址。在Mac OSX下,你可以用下面命令来查询背后的IP地址:

dns-sd -q raspberrypi.local

互联网SSH登陆

介绍了局域网和点对点情况下的SSH登陆,我们可以把野心放大一点,尝试在互联网环境中远程登陆SSH。我下面用几种不同的方式实现。

1)NAT端口映射

如果我们能拿到树莓派在互联网上的公网IP地址,那么就可以直接用一个命令SSH到该IP地址。问题是,现在大部分局域网络都用DHCP来给设备分配网内的私有IP,很可能只有网关才享有一个公网IP地址。有些网关允许设置基于NAT的端口映射。如下图所示,一组公网IP和端口号,能对应唯一的私网IP和端口号。这种情况下,我们就能从外网连接到局域网中的树莓派:

我们可以利用这一机制来找到树莓派,比如说,通过设置网关,让公网的199.165.145.1:8999对应私网的10.0.0.1:22。这里的199.165.145.1是网关的公网IP。10.0.0.1是树莓派的私网IP。22是SSH协议的默认端口。这时在互联网上的其他电脑上,就可以SSH连接到局域网中的树莓派:

ssh pi@199.165.145.1:8999

为了用该方法,我们的网关必须允许相关的端口映射设置。而很多网关出于安全考虑,完全不向外网开放类似的端口映射。因此,这一方法看似可行,但实践中会遇到很多困难。

2)REMOT3.IT

树莓派官网提供了一种简便的方法,即使用Weaved公司推出的REMOT3.IT。首先要在树莓派上安装相关的工具:

sudo apt-get install weavedconnectd
sudo weavedinstaller

在安装过程中,REMOT3.IT会要求你输入REMOT3.IT网站的账户信息。树莓派上安装完成后,在REMOT3.IT网站登陆自己的账户,就能看到树莓派设备。如下图所示,网站会提供用于在互联网上连接到该树莓派所需的地址和端口号。根据地址和端口号,你就可以在任何一个连接到互联网的电脑上,用SSH客户端访问该树莓派。这个服务很好用,只恨该网站不但会限制树莓派数目,还会限制SSH连接的时间。想要避免这些限制,就需要缴费了。

3)SSH反向隧道

其实,类似于REMOT3.IT的技术不难自行实现。我们可以用SSH反向隧道(reverse tunneling)技术,从外网远程登陆树莓派。首先,让树莓派主动向公网服务器的某个端口发起SSH连接,比如vameilab.com:8999,形成一个SSH隧道。当我们使用互联网上的其他电脑,通过SSH连接到服务器的这一端口时,服务器会把通信内容接力到与树莓派的SSH隧道中,最终抵达树莓派。整个过程如下图所示。由于公网服务器的域名和IP地址都相对固定,我们也不用为找不到树莓派的IP地址而头痛。

SSH反向隧道

了解原理之后,我们也可以自行实现一个类似的中继服务器。你可以使用Amazon或阿里云的弹性云来架设中继服务器。你需要在云的控制台中开放用于反向连接的端口,如8999。从树莓派上用SSH命令建立反向隧道:

ssh -R 8999:localhost:22 vamei@vameilab.com

上面的命令,从树莓派的22端口到vameilab.com的8999端口建立反向隧道。登陆时用的vamei是中继服务器上的一个账户。反向隧道建立之后,你就可以从互联网上直接登陆树莓派了:

ssh -p 8999 pi@vameilab.com

总结

这篇文章介绍了点对点、局域网、互联网三个层面的远程登陆。在这三个层面上,树莓派还有很多种其他的远程登陆方式。我会在未来继续探索,并不断补充到这篇文章中。

欢迎阅读“骑着企鹅采树莓”系列文章

树莓派:漂洋过海来看你相关推荐

  1. 漂洋过海来看你 老歌

    漂洋过海来看你 词曲:李宗盛唱:娃娃 为你我用了半年的积蓄漂洋过海的来看你 为了这次相聚 我连见面时的呼吸都曾反复练习 言语从来没能将我的情意表达千万分之一 为了这个遗憾 我在夜里想了又想不肯睡去 记 ...

  2. 漂洋过海来看你 可惜Uber不便宜

    PMCAFF(pmcaff.com):最大互联网产品社区,是百度,腾讯,阿里等产品经理的学习交流平台.定期出品深度产品观察,互联产品研究首选. 本文由PMCAFF观点栏目原创发布.未经许可,禁止转载. ...

  3. 2022最新树莓派4B学习笔记:系统备份 OpenCV SPI TFT HTML

    树莓派4B学习笔记 一.首次使用 1.系统烧录 2.优化配置与备份 3.一些基本操作 二.摄像头 三.Pi Dashboard好看的仪表盘 四.OpenCV安装编译 五.SPI_TFT屏幕 六.最终代 ...

  4. CSS学习--DIY Loading动画

    首先要知道什么是CSS3动画?然后才能做出自己想要的动画效果.下面会通过3个简单的Loading动画效果来对CSS3 animation动画做一个简单介绍,希望对你有用. 动画是使元素从一种样式逐渐变 ...

  5. table标签修改tr,td标签的行距

    修改tr标签的行距,tbale标签的td标签间距 看如下Css文件的代码,其都没有table的tr行距产生效果 tr{margin-top: 10px;padding: 10px; } td{marg ...

  6. docker tomcat 多开 实例_给妈妈讲什么是docker

    上周对象突然心血来潮说想养个小宠物,我问想养啥她又说随便,你看着办!!!这我真的比较难办啊!但是咱们程序员能有个对象就不错了,还不赶紧宠着,我只能照办咯!   我去到了一家宠物店,半天也没有找到合适的 ...

  7. 成立阿里大农业兄弟连-万祥军:农民丰收节交易会乡村脱贫

    成立阿里大农业兄弟连-万祥军:农民丰收节交易会乡村脱贫 新闻中国采编网 中国新闻采编网 谋定研究中国智库网 经信研究 国研智库 国情讲坛 哲商对话 万权采编:果不其然,1月18日,阿里巴巴第三届年货节 ...

  8. 多图 | 4人4天攻占10国榜首,只因有此神器……(文末高能预警)

    PMCAFF(pmcaff.com):最大互联网产品社区,是百度,腾讯,阿里等产品经理的学习交流平台.定期出品深度产品观察,互联产品研究首选. 数说:数字趣说产品,颠覆你的想象.定期更新,敬请关注. ...

  9. 好程序员前端分享使用JS开发简单的音乐播放器

    好程序员前端分享使用JS开发简单的音乐播放器,最近,我们在教学生使用JavaScript,今天就带大家开发一款简单的音乐播放器.首先,最终效果如图所示: 首先,我们来编写html界面index.htm ...

  10. cdf日上免税店_cdf会员购吐槽大会!从上海日上开始!

    欢迎来到 cdf会员购吐槽大会第一弹 我是那只陪你剁手的猫 2020年注定有点不一样不是说寒暑假居然可以连休而是伴随着日上直邮cdf会员购直邮昔日远在境外只能到店自取或是只能托人带回的免税店商品居然搞 ...

最新文章

  1. 如何设计并实现一个秒杀系统?(含完整代码)
  2. How to Convert Array to ArrayList in Java?
  3. html中加入好看的行号,仅使用CSS在pre上创建行号
  4. Java中的5种同步辅助类
  5. 零基础自学python的建议-【老男孩Python课堂安排】零基础Python学习方法
  6. 11.2.0.2 HAIP
  7. 巴什博弈例题:NYOJ23;HDU:2149,1847,2897,2188
  8. c语言随机迷宫生成方法,[原创]递归随机迷宫生成算法详解
  9. 关于HTML使用ComDlg ActiveX 无法弹出相应对话框的问题1
  10. 网站能拿到其他网站的cookie_网站能给公司带来哪些好处?
  11. spark 序列化_spark shell 配置 Kryo 序列化
  12. 【Linux开发】OpenCV在ARM-linux上的移植过程遇到的问题1---cvNamedWindow调用报错的问题...
  13. libevent源码深度剖析九
  14. 成立烘焙公司、买茶饮 瑞幸咖啡谋变破局
  15. oracle logical standby,Oracle10gR2 Logical Standby(一)概念与原理
  16. <select> 表单元素
  17. Linux下的lds链接脚本简介(三)
  18. 图像增广——图片旋转任意角度(python实现)
  19. windows2003r2下载
  20. stm32显示flash下载失败_Flash download failed-Cortex-M3的原因及解决办法

热门文章

  1. 强烈推荐深入浅出jBPM
  2. Psychology
  3. swift 高级进阶1:类与结构体(上)
  4. java验证邮件正则
  5. 【linux基础】cuDNN版本查询
  6. BZOJ - 2115 独立回路 线性基
  7. InfluxDB、grafana、collect部署监控(centos6.8)
  8. 小宇飞刀与xieyunc
  9. 干货 | 鸟瞰 MySQL,唬住面试官!
  10. 互联网公司是如何腐败的?