Mosquitto 是一个开源的 MQTT(消息队列遥测传输)消息代理(broker),实现了 MQTT 协议 3.1 和 3.1.1 版本。它主要用于机器之间的消息通信(即物联网、M2M),特别是资源受限的设备和低带宽、不可靠网络的环境。
安装 Mosquitto
sudo apt update
sudo apt install mosquitto mosquitto-clients
安装完成以后Mosquitto会自动启动。
常用命令
# 启动Mosquitto
sudo systemctl start mosquitto
# 停止Mosquitto
sudo systemctl stop mosquitto
# 重启
sudo systemctl restart mosquitto
# 查看运行状态
sudo systemctl status mosquitto
# 设置开机启动
sudo systemctl enable mosquitto
# 禁用开机启动
sudo systemctl disable mosquitto
设置密码
创建密码文件
Mosquitto 提供了 mosquitto_passwd
工具来创建和管理密码文件。假设你想将用户的认证信息保存到 /etc/mosquitto/passwd
文件中:
sudo mosquitto_passwd -c /etc/mosquitto/passwd your_username
-c
参数表示创建一个新的密码文件(如果文件已存在,则会覆盖)。your_username
是你的用户名,系统会提示你输入并确认密码。
要添加更多用户,可以重复运行以下命令(不使用 -c
,这样不会覆盖文件):
sudo mosquitto_passwd /etc/mosquitto/passwd another_username
配置 Mosquitto 使用密码文件
编辑 Mosquitto 的配置文件,一般位于 /etc/mosquitto/mosquitto.conf
或 /etc/mosquitto/conf.d/default.conf
。如果配置文件中没有 allow_anonymous
和 password_file
相关配置项,可以添加以下内容:
# 禁用匿名访问
allow_anonymous false
# 指定密码文件
password_file /etc/mosquitto/passwd
保存配置文件后,重启 Mosquitto 服务使更改生效
sudo systemctl restart mosquitto
验证配置
你可以使用 Mosquitto 客户端来验证配置是否成功:
mosquitto_sub -h localhost -t test/topic -u your_username -P your_password
如果 Mosquitto 客户端能够成功连接并订阅主题 test/topic
,则说明密码配置成功。
修改密码
方式一适合用户名不变,仅需更新密码的场景(更高效)。
方式二适合需要更换用户名或彻底移除旧凭证的场景。
方式一: 修改用户密码
1、更新密码
使用 mosquitto_passwd
工具修改用户密码(需指定密码文件路径):
sudo mosquitto_passwd -U /etc/mosquitto/passwd
- 输入命令后,按提示输入用户名和新密码。
若提示 -U
参数无效,改用以下命令(明文输入密码):
sudo mosquitto_passwd /etc/mosquitto/passwd 用户名
2、重启Mosquitto服务
sudo systemctl restart mosquitto
方式二:删除用户后重新添加
1、删除旧用户
sudo mosquitto_passwd -D /etc/mosquitto/passwd 旧用户名
2、添加新用户
sudo mosquitto_passwd -b /etc/mosquitto/passwd 新用户名 新密码
3、重启Mosquitto服务
sudo systemctl restart mosquitto
修改端口
Mosquitto 默认端口1883,可以修改配置文件来自定义端口,Mosquitto 的主配置文件通常位于 /etc/mosquitto/mosquitto.conf
或 /etc/mosquitto/conf.d/default.conf
。
在配置文件中查找 listener
相关的行。如果没有找到,可以手动添加。listener
指令用于指定 Mosquitto 的监听端口和绑定的网络接口。
# 监听端口,默认是 1883(非加密端口)
listener 1883
# 如果你想将其更改为其他端口(例如 1884)
listener 1884
# 监听的网络接口,默认监听所有接口
# 可以绑定到特定的 IP 地址(例如 127.0.0.1 仅允许本地连接)
# bind_address 127.0.0.1
要使新的配置生效,需要重启 Mosquitto 服务:
sudo systemctl restart mosquitto
你可以使用以下命令来验证 Mosquitto 是否在指定的端口上监听:
sudo netstat -tulnp | grep mosquitto