實驗環境
- 樹莓派 3B(包含一個8GB記憶體卡,越大越好)
- MacOS 10.15.4(Windows 也可,別是樹莓派就行)
目標
- 樹莓派開機自動連線伺服器
- 遠端 ssh 連線樹莓派
為樹莓派安裝系統
推薦下載官方提供的 raspbain 系統,後期可以通過修改 SD 卡中的配置檔案,連線上 WIFI 網路。下載其他映象可能做不到這一點。
如果手頭的開發機系統是 *inux ,可以使用dd命令來將映象燒寫到 SD 卡。如果是 Windows 系統的話,可以考慮使用一些其他的軟體去燒寫。
MacOS 下,dd
燒寫映象到SD卡的參考命令如下:
# 假設SD卡在系統的裝置檔案是 /dev/disk2s1
diskutil unmount /dev/disk2s1
複製程式碼
寫映象(一定小心)
sudo dd bs=4m if=/path_to/your_operator_system.img of=/dev/disk2
複製程式碼
寫映象過程中不會有進度提示,耐心等待即可。
完事兒之後,將 SD 卡插進樹莓派,上電。
顯示器、滑鼠、鍵盤、網線啥啥的往上插就行了。如果沒有顯示器和滑鼠鍵盤的話,則可以通過更改/boot/wpa_supplicant.conf
檔案,將 WIFI 連線資訊配進去,然後再上電即可。
配置檔案的參考格式如下:
country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="WiFi-A"
psk="12345678"
key_mgmt=WPA-PSK
priority=1
}
network={
ssid="WiFi-B"
psk="12345678"
key_mgmt=WPA-PSK
priority=2
scan_ssid=1
}
複製程式碼
經過重重阻撓,假設已經連線到了網路。
從路由器的裝置列表中找到樹莓派的 IP,假設為 192.168.1.53, 通過以下命令:
ssh pi@192.168.1.53
複製程式碼
即可連線到樹莓派,預設密碼是 raspberry
隨後,更新一下系統依賴即可:
sudo apt update && sudo apt upgrade
複製程式碼
NAT
總所周知,IPv4地址是非常稀缺的資源,目前的話,大概在 20 ~ 30 美元一個。為家裡的每一個裝置都分配一個 IPv4 地址無疑是非常奢侈的一個事情。IPv6 雖說地址足夠多,且現在的支援性雖然好了很多,但是鏈路還是不通暢,還需要時間去成熟。
NAT 全稱是 Network Address Translation,網路地址轉換。通過一定的手段,可以將私網網段的 IP 地址轉換到公網上。當然這裡的前提是我們需要有一個公網 IP 地址。這裡不要買,租就好了。
比較合適的辦法是在雲伺服器廠商打折的時候,買一臺小的 VPS,一般一年也就不到 100 元。
FRP
將私網IP NAT 到公網的方法有很多,比如有ngrok、natapp等等,上述方法都是基於公網環境,條件較差,速度也不是特別理想ngrok私網部署是收費的,且易用性、功能有限。
比較推薦的解決方案是FRP。開源,支援自己部署到 VPS 上。
FRP 分為兩部分,frps和frpc。分別是 server 端和 client 端。繫結了公網IP地址的 VPS 執行 server端,需要遠端控制的樹莓派需要執行 client 端。
FRPC 配置參考
完整的配置檔案參考專案中的frpc_full.ini
其中,server*
要和 frps 中的配置對的上,分別是frps 執行機器所在的公網 IP 地址和執行繫結的 Port。login_fail_exit為 false 的時候,會在斷網時候重試,直到連線成功。
admin_* 部分配置後,即可在本地訪問 http://192.168.1.53:7400,完成對 client 配置的更改和reload
ssh 部分的 remote_port 欄位,值推薦大於 1024,之後可以通過 ssh -oPort=[port] pi@x.x.x.x 通過公網遠端控制樹莓派(自行替換命令中的 IP 和 Port)。
[common]
user = "your_name"
server_addr = x.x.x.x
server_port = 7000
log_file = /var/log/frp/frpc.log
log_level = info
log_max_days = 7
privilege_token = [token]
login_fail_exit = false
admin_addr = 0.0.0.0
admin_port = 7400
admin_user = admin
admin_pwd = admin
[ssh]
privilege_mode = true
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = [port]
use_gzip = true
use_encryption = true
pool_count = 2
[range:VNC]
privilege_mode = true
type = tcp
local_ip = 127.0.0.1
local_port=5901-5903
remote_port= 55901-55903
FRPS 配置參考
[common]
bind_port = 7000
vhost_http_port = [vhost_port]
subdomain_host = [domain]
dashboard_port = 7500
dashboard_user = [username]
dashboard_pwd = [password]
log_file = ./frps.log
log_level = info
log_max_days = 3
privilege_mode = true
privilege_token = [token]
max_pool_count = 50
複製程式碼
下面會以 frpc 為例,說明建立自啟服務的操作姿勢
自啟服務
對於樹莓派,我們希望每次系統啟動的時候,自動執行 frpc,連線到配置好的伺服器上,如果斷網之後,還應該能夠重試下去,保證我們隨時隨地 attach 進系統。
對於上述需求,開機自啟部分可以配置自啟動服務來實現。參考的做法如下:
下載 frp release:
# 樹莓派中執行
wget https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_linux_arm.tar.gz
tar xzf frp_0.21.0_linux_arm.tar.gz
cd frp_0.21.0_linux_arm
複製程式碼
將 frpc 和其配置檔案移動到合適的位置,/etc一般存放配置檔案,/usr/local 一般可以放自己安裝的系統級軟體,/sbin 一般放網路相關。沒有固定的要求,記住放置的位置即可
# 樹莓派中執行
sudo mkdir -p /etc/frpc
sudo mkdir -p /var/log/frp
sudo cp frpc /usr/local/sbin
sudo cp frpc.ini /etc/frpc
sudo touch /var/log/frp/frpc.log
複製程式碼
建立系統服務檔案,ExecStart 位置一定得指對
sudo vim /etc/systemd/system/frpc.service
複製程式碼
參考格式如下:
# /etc/systemd/system/frpc.service
Description=frpc daemon
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
ExecStart=/usr/local/sbin/frpc -c /etc/frpc/frpc.ini
[Install]
WantedBy=multi-user.target
複製程式碼
註冊服務自啟
sudo systemctl start frpc
sudo systemctl enable frpc
複製程式碼
大功告成~,Frps 的配置方式和 Frpc 大同小異,不過需要在 VPS 中操作就好了。
之後在隨便任何一臺機器上執行
ssh -oPort=[port] user@public_ip
複製程式碼
就可以通過ssh連線到到樹莓派。還可以通過 ssh 命令的 -i 引數,指定連線用的祕鑰,實現免密連線。這部分會在接下來的文章中進行說明。
感謝閱讀。
長按兩秒識別二維碼關注 ▼