1.mosquitto介绍

MQTT是物联网的一种常见链路协议,它分为MQTT客户端和MQTT服务器(BROKER),MQTT设备充当了MQTT客户端的角色, 它们会连接到MQTT服务器上,然后借助MQTT服务器的转发,各设备之间可以互相通信。

部署一个轻量级的MQTT服务器在很多测试环境,或者边缘设备的内部,是一个必要的措施。

mosquitto,就是这么一个轻量级的MQTT服务器,它可以在嵌入式设备之中运行。

2.安装mosquitto

  # 更新
  apt update -y

  # 安装基础依赖
  apt install -y mosquitto mosquitto-clients

3.查看mosquitto

  # 启动服务
  systemctl start mosquitto
  
  # 查看启动状态
  systemctl status mosquitto
  
  # 设置开机自启
  systemctl enable mosquitto

4.收发消息

在linux中,启动两个ssh终端,通过mqtt客户端命令,互相发送消息。

发布消息(终端1)

  mosquitto_pub -h localhost -p 1883 -u admin -P 12345678 -t "/test" -m "Hello Ubuntu"

订阅消息(终端2):

  mosquitto_sub -h localhost -p 1883 -u admin -P 12345678 -t '/#' -v

这时候,你可以在终端2上看到终端1发送过来的报文Hello Ubuntu

5.配置远程访问

mosquitto安装完成以后,默认是无法被外部的其他设备访问的,这时候需要通过修改配置文件,允许外部访问。

5.1 匿名连接(测试环境)

匿名连接,通常用于测试环境,减少各个设备上的配置

  # 编辑/etc/mosquitto/mosquitto.conf
  vim /etc/mosquitto/mosquitto.conf

添加以下内容,从而被外部访问

# 绑定到所有网络接口(0.0.0.0)
listener 1883 0.0.0.0

# 允许匿名连接(仅测试用,生产环境应配置认证)
allow_anonymous true

5.2 账号连接(生产环境)

在生产环境,处于信息安全的考虑,是不允许匿名访问,mosquitto提供了MQTT的登录认证支持。

5.2.1 启用账号连接

  # 编辑/etc/mosquitto/mosquitto.conf
  vim /etc/mosquitto/mosquitto.conf

添加以下内容,从而被外部访问

# 绑定到所有网络接口(0.0.0.0)
listener 1883 0.0.0.0

# 使用账号连接
allow_anonymous false
password_file /etc/mosquitto/passwd

5.2.2 创建用户账号

  # 生成admin用户(-c 选项,表示创建新的密码文件,如果文件已存在,使用此选项会覆盖原有文件)
  mosquitto_passwd -c /etc/mosquitto/passwd admin

5.2.3 重启生效

  # 生成admin用户(-c 选项,表示创建新的密码文件,如果文件已存在,使用此选项会覆盖原有文件)
  systemctl restart mosquitto

6.卸载

在linux中,启动两个ssh终端,通过mqtt客户端命令,互相发送消息。

发布消息(终端1)

  apt remove -y mosquitto mosquitto-clients

  apt autoremove -y 
  apt purge -y mosquitto mosquitto-clients
  

7.一键安装

下面提供了一键安装命令,简化安装过程

apt-get update -y && \
apt remove -y mosquitto mosquitto-clients && \
apt autoremove -y  && \
apt purge -y mosquitto mosquitto-clients && \
apt install -y mosquitto mosquitto-clients && \
systemctl enable mosquitto && \
echo -e "\n# 绑定到所有网络接口\nlistener 1883 0.0.0.0\n" >> /etc/mosquitto/mosquitto.conf && \
echo -e "\n# 使用账号连接\nallow_anonymous false\npassword_file /etc/mosquitto/passwd\n" >> /etc/mosquitto/mosquitto.conf && \
mosquitto_passwd -c /etc/mosquitto/passwd admin && \
systemctl restart mosquitto