嵌入式設備上線之後,如果遇到問題想要線上維護,最直接的方法的能夠遠程ssh進入到設備裏,然後查看日誌定位問題,這邊介紹使用frp配合mqtt的方式進行設備遠程調試。
1.遠程調試原理
遠程調試的原理如下:
- 本地網關與MQTT服務器保持長連接,用來接收開啓遠程/關閉遠程命令
- fprs服務器需要有公網IP,開發人員可以通過該公網IP和指定的端口遠程
- 開發人員通過約定好的MQTT消息,發送開啓遠程命令給本地網關。本地網關收到開啓遠程的命令後,就啓動frpc去連接對應的frps服務器。
- 本地網關frpc連接frps成功之後,開發人員就可以內網穿透ssh到本地網關
2.frps服務器搭建
2.1 下載
不需要編譯,可以直接用
https://github.com/fatedier/frp/releases
從github上面下載對應平臺的壓縮包,是go語音寫的不需要編譯。
ubuntu:~/Desktop/frp_0.36.2_linux_arm$ ls
frpc frpc_full.ini frpc.ini frps frps_full.ini frps.ini LICENSE systemd
- frps爲服務器
- frps.ini爲服務器的配置文件,frps_full.ini全部的配置信息
- frpc爲客戶端
- frpc.ini爲客戶端的配置文件,frpc_full.ini全部的配置信息
2.2 服務器配置
一般會被指兩個參數
- bind_port服務器綁定的地址
- dashboard服務器的後臺管理頁面地址
[common]
bind_port = 1000
dashboard_user = admin
dashboard_pwd = admin
dashboard_port = 1001
enable_prometheus = true
設置好內容後,運行如下命令就可以
/usr/local/bin/frps -c /etc/frp/frps.ini
看板內容如下:
2.3 服務器添加自啓動
# 需要先 cd 到 frp 解壓目錄.
# 複製文件
cp frps /usr/local/bin/frps
mkdir /etc/frp
cp frps.ini /etc/frp/frps.ini
# 編寫 frp service 文件,以 ubuntu 爲例
vim /usr/lib/systemd/system/frps.service (有時候需要手動創建system文件夾)
# 內容如下
[Unit]
Description=frps
After=network.target
[Service]
TimeoutStartSec=30
ExecStart=/usr/local/bin/frps -c /etc/frp/frps.ini
ExecStop=/bin/kill $MAINPID
[Install]
WantedBy=multi-user.target
啓動 frp 並設置開機啓動
systemctl enable frps
systemctl start frps
systemctl status frps
部分服務器上,可能需要加 .service 後綴來操作,即:
systemctl enable frps.service
systemctl start frps.service
systemctl status frps.service
停止frps
systemctl stop frps
運行狀態和日誌
[root@VM-11-12-centos frp_0.35.1_linux_amd64]# systemctl status frps
● frps.service - frps
Loaded: loaded (/usr/lib/systemd/system/frps.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2021-02-23 14:07:27 CST; 1min 8s ago
Process: 18791 ExecStop=/bin/kill $MAINPID (code=exited, status=0/SUCCESS)
Main PID: 12498 (frps)
CGroup: /system.slice/frps.service
└─12498 /usr/local/bin/frps -c /etc/frp/frps.ini
3.frpc客戶端搭建
3.1 客戶端配置
使用的就是上面下載的frpc客戶端和frpc.ini配置文件
如下配置,就是將本地的ssh 22端口,映射到frps公網IP的1002端口
root@zihome:/# cat /tmp/frpc.ini
[common]
server_addr = 公網IP
server_port = 1000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
authentication_timeout = 0
remote_port = 1002
設置好內容後,運行如下命令就可以
frpc -c /tmp/frpc.ini
然後就可以遠程登錄了
ssh -p 1002 root@公網IP
官網: