樹莓派:漂洋過海來看你

做者:Vamei 出處:http://www.cnblogs.com/vamei 嚴禁任何形式轉載。html

 

給樹莓派連上顯示器和鍵盤鼠標,就能夠像使用一臺電腦同樣使用它了。但不少時候,咱們是把體積小巧的樹莓派當作一個便攜設備來使用的。這種時候,用戶可不但願隨身帶着體積龐大的鼠標、鍵盤和顯示器。若是能用手中的電腦直接鏈接樹莓派,而後用該電腦的輸入輸出設備來操縱樹莓派電腦,就能夠省去不少沒必要要的麻煩。除此以外,樹莓派在物聯網情境下的應用,也離不開多樣的遠程鏈接方式。安全

 

局域網SSH登錄

常見的家庭或辦公網絡都是以一個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客戶端軟件。網站

 

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

 

總結

這篇文章介紹了點對點、局域網、互聯網三個層面的遠程登錄。在這三個層面上,樹莓派還有不少種其餘的遠程登錄方式。我會在將來繼續探索,並不斷補充到這篇文章中。

 

歡迎閱讀「騎着企鵝採樹莓」系列文章 

相關文章
相關標籤/搜索