Mosquitto身份验证配置
参考:
服务器端:
在MQTT服务器端修改Mosquitto配置文件:
sudo vim /etc/mosquitto/mosquitto.conf
在其中添加:
allow_anonymous false #禁止匿名访问
password_file /etc/mosquitto/pwfile #指定身份验证文件,必须为全局路径
#acl_file /etc/mosquitto/acl #指定每个账户的话题访问权及发送权等,由于我不需要,故在此注释,如需配置,具体使用可参考文章开头的链接
然后在服务器上生成身份验证文件:
mosquitto_passwd -c /etc/mosquitto/pwfile username
其中username为你要设置的用户名,终端会提示你输入两次相同的密码设置用户名密码(注意,亲测密码输错后按删除键无效,只能重新运行本条命令进行设置)
上面的命令中的-c参数代表操作会覆盖原有文件中的用户信息(如果有的话),如果需要额外添加用户和密码,可以使用:
mosquitto_passwd -b /etc/mosquitto/pwfile username password
注意上述命令使用明文输入密码存在风险。
关于mosquitto_passwd的更多使用方法可参考:mosquitto_passwd man page
客户端:
在服务器端设置好之后,这个时候可以在客户端使用
mosquitto_sub -h your_mqtt_server_ip -t your_topic
进行验证,可以发现终端会提示:
Connection error: Connection Refused: not authorised.
尝试使用
mosquitto_sub -h your_mqtt_server_ip -t your_topic -u username -P "password"
其中-u参数后接在服务器上设置的mosquitto用户名,-P参数后接为该用户名设置的密码,可以发现加上上述参数后可以正常订阅话题。
在mosquitto cpp库中,可以使用mosquittopp类的成员函数
int DEPRECATED username_pw_set(const char *username, const char *password=NULL);
配置用户名和密码,该函数需要在使用connect函数或connect_async函数前进行调用。