做者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载。html
给树莓派连上显示器和键盘鼠标,就能够像使用一台电脑同样使用它了。但不少时候,咱们是把体积小巧的树莓派当作一个便携设备来使用的。这种时候,用户可不但愿随身带着体积庞大的鼠标、键盘和显示器。若是能用手中的电脑直接链接树莓派,而后用该电脑的输入输出设备来操纵树莓派电脑,就能够省去不少没必要要的麻烦。除此以外,树莓派在物联网情境下的应用,也离不开多样的远程链接方式。安全
常见的家庭或办公网络都是以一个WiFi路由器为中心的。这种局域网场景下,能够很容易的用SSH的方式来远程登录树莓派。SSH是用于远程服务器管理的加密协议。SSH分为服务器和客户端两端。树莓派将做为服务器端,而同一局域网下的另外一台电脑能够做为客户端。客户端成功登录以后,咱们能够从客户端用命令行的方式来远程操做服务器端。服务器
首先,咱们须要开启树莓派上的SSH服务器。树莓派已经预装好了SSH服务器,咱们只须要进入树莓派的设置页面开启就能够。从终端用命令行进入设置页面:网络
sudo raspi-config
而后在"5 Interfacing Options" -> "P2 SSH"中打开SSH服务器:app
为了远程链接,咱们必须知道树莓派的IP地址。在树莓派上,咱们能够用ifconfig命令来找到树莓派的IP地址:ssh
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客户端软件。网站
但在上面的过程当中,咱们必须从树莓派本地运行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。我下面用几种不一样的方式实现。
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
这篇文章介绍了点对点、局域网、互联网三个层面的远程登录。在这三个层面上,树莓派还有不少种其余的远程登录方式。我会在将来继续探索,并不断补充到这篇文章中。
欢迎阅读“骑着企鹅采树莓”系列文章