0%

[MQTT] CentOS 7 安裝 Mosquitto 並使用帳密驗證

前言

在 IoT 領域第一個碰到的傳輸協定應該會是 http,再深入一點則是 MQTT,MQTT 是一個非常輕便的傳輸協定,沒有像是 http header 的東西,可以節省相當的流量!實現 MQTT 傳輸協定最有名的軟體應該莫過於 Mosquitto,網路上有許多 Mosquitto 的說明,這裡只紀錄如何架設與測試。

環境

  • CentOS 7.9

安裝

Mosquitto 預設是不在安裝套件內的,因此需要先安裝 Extra Packages for Enterprise Linux (EPEL)

1
[user@localhost ~]$ sudo yum install -y epel-release

安裝 Mosquitto 並啟動服務

1
2
3
[user@localhost ~]$ sudo yum install -y mosquitto
[user@localhost ~]$ sudo systemctl enable mosquitto # 讓 Mosquitto 重開機會自動啟動
[user@localhost ~]$ sudo systemctl start mosquitto # 現在馬上啟動 Mosquitto

測試

開啟一個新的 Terminal (在此稱 tty1),輸入指令來訂閱主題

1
[user@localhost ~]$ mosquitto_sub -h localhost -t Try/MQTT/CentOS7
  • mosquitto_sub:訂閱主題。
  • -h:指定 MQTT Broker 的 IP 或 FQDN。
  • -t:指定訂閱的主題名稱。

開啟另一個新的 Terminal (在此稱 tty2),輸入指令來發布主題

1
[user@localhost ~]$ mosquitto_pub -h localhost -t Try/MQTT/CentOS7 -m "Test Message"
  • mosquitto_pub:發布主題。
  • -h:指定 MQTT Broker 的 IP 或 FQDN。
  • -t:指定發布的主題。
  • -m:發布的訊息。

這時在 tty1 應該就能看到 Test Message 的訊息,此時代表 Mosquitto 安裝完成且可以正常運行!測試完畢後,可以關閉 tty1 與 tty2。

建立使用者帳號

創建帳號

1
2
3
[user@localhost ~]$ sudo mosquitto_passwd -c /etc/mosquitto/passwd test_account
Password: # 輸入 test_account 的密碼
Reenter password: # 再次輸入 test_account 的密碼
  • -c:執行指令的同時建立一個帳密檔。
  • /etc/mosquitto/passwd:為帳密檔位置。
  • test_account:為所要新增的帳號,可以自行更改。

修改 Mosquitto 設定檔 (/etc/mosquitto/mosquitto.conf),加入以下兩行

1
2
allow_anonymous false               # 不可匿名登入,一定要輸入帳密
password_file /etc/mosquitto/passwd # 讓 Mosquitto 知道帳密檔在哪裡

重啟 Mosquitto 服務

1
[user@localhost ~]$ sudo systemctl restart mosquitto

使用者帳號測試

開啟一個新的 Terminal (在此稱 tty1),使用指令來訂閱主題。但由於我們已經設定為不可匿名登入,可以預想到的是會無法正常運作,因為沒有授權 (也就是沒有輸入帳號)

1
2
[user@localhost ~]$ mosquitto_sub -h localhost -t Try/MQTT/CentOS7
Connection error: Connection Refused: not authorised.

tty1 中的指令更改如下

1
[user@localhost ~]$ mosquitto_sub -h localhost -t Try/MQTT/CentOS7 -u test_account -P 1234
  • -u:指定使用者帳號。
  • -P:指定密碼,注意是大寫 P。

開啟另一個新的 Terminal (在此稱 tty2)

1
[user@localhost ~]$ mosquitto_pub -h localhost -t Try/MQTT/CentOS7 -m "Test Message" -u test_account -P 1234 

這時在 tty1 應該就能看到 Test Message 的訊息,此時代表帳號密碼機制設定完成並且有正常運作!

設定防火牆

在 CentOS 中幾乎所有的 Port 預設對外服務都是關閉的,無法由外部連入,因此需要另外設定才能開放給其他主機連線,MQTT 預設的 Port 為 1883

1
2
3
4
[user@localhost ~]$ sudo firewall-cmd --permanent --add-port=1883/tcp
success
[user@localhost ~]$ sudo firewall-cmd --reload
success
很高興能在這裡幫助到您,歡迎登入 Liker 為我鼓掌 5 次,或者成為我的讚賞公民,鼓勵我繼續創造優質文章。
以最優質的內容回應您的鼓勵