2018-11-14-mqtt-mosquitto系列10之配置桥接用户名密码验证

Posted 小肥的胖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018-11-14-mqtt-mosquitto系列10之配置桥接用户名密码验证相关的知识,希望对你有一定的参考价值。

mosquitto

基于用户名密码的桥接

基于前一篇2018-11-13-mqtt-mosquitto系列09之配置桥接,给桥接设置用户名密码。

桥接设置用户名密码

主机128是桥接中心,129、130、131是三个普通broker。设置订阅128和129需要用户名密码验证,130和131的配置不变。

给128添加用户名密码验证

修改128主机的mosquitto.conf

# vim /etc/mosquitto/mosquitto.conf

...

# 关闭匿名模式
allow_anonymous false
# 指定密码文件
password_file /etc/mosquitto/pwfile.conf

...

设置128的登录账号密码。设置参考2018-11-10-mqtt-mosquitto系列06之mosquitto_passwd设置密码

# mosquitto_passwd -b /etc/mosquitto/pwfile.conf lxy128 lxy128

给129添加用户名密码验证

修改129主机的mosquitto.conf

# vim /etc/mosquitto/mosquitto.conf

...

# 关闭匿名模式
allow_anonymous false
# 指定密码文件
password_file /etc/mosquitto/pwfile.conf

...

129的登录账号密码

# mosquitto_passwd -b /etc/mosquitto/pwfile.conf lxy129 lxy129

桥接中心配置 - 先不设置密码

128还是作为桥接中心,注意此时还没有配置对应的用户名密码,是为了看一下不设置用户名密码情况下的情况。

# vim /etc/mosquitto/mosquitto.conf

...

# 关闭匿名模式
allow_anonymous false
# 指定密码文件
password_file /etc/mosquitto/pwfile.conf

# 桥接信息
connection bridge129
address 192.168.193.129:1883
cleansession true
topic topic/# both 0
notifications true
notification_topic notifications129

connection bridge130
address 192.168.193.130:1883
cleansession true
topic topic/# both 0
notifications true
notification_topic notifications130

connection bridge131
address 192.168.193.131:1883
cleansession true
topic topic/# both 0
notifications true
notification_topic notifications131

...

测试

开始测试,每个主机都启动mosquitto_sub监听。并在128主机中发送两条消息

# mosquitto_pub -t "topic/128" -m "i'm 128, msg to 128" -u lxy128 -P lxy128
# mosquitto_pub -t "topic/128" -m "i'm 128, msg to 128" -u lxy128 -P lxy128

期望

发送端 -> 接收端 --> 期望能收到消息的接收端 --> 实际能收到消息的接收端
128   -> 128   --> 128 129 130 131   --> 128 130 131
128结果

128能收到消息。同时可以看到,对于notifications,130,131都是1,只有129是0,说明129没连上,多个notifications129 0 说明有重复去连接129主机,为什么连不上129,原因也很简单,因为在128的桥接配置中没有配置129的账号密码。

root@ubuntu:/etc/mosquitto# mosquitto_sub -t "#" -v -u lxy128 -P lxy128
notifications129 0
notifications130 1
notifications131 1
notifications129 0
notifications129 0
topic/128 i'm 128, msg to 128
notifications129 0
topic/128 i'm 128, msg to 128
notifications129 0
notifications129 0
notifications129 0
notifications129 0
129结果

没有收到任何消息

root@ubuntu:~# mosquitto_sub -t "#" -v -u lxy129 -P lxy129
130结果

正常

root@ubuntu:~# mosquitto_sub -t "#" -v
notifications130 1
topic/128 i'm 128, msg to 128
131结果

正常

root@ubuntu:~# mosquitto_sub -t "#" -v
notifications131 1
topic/128 i'm 128, msg to 128

桥接中心配置 - 设置密码

在128中mosquitto.conf中配置129的账号密码,使用remote_username 和 remote_password。

# vi /etc/mosquitto/mosquitto.conf

...

connection bridge129
address 192.168.193.129:1883
cleansession true
topic topic/# both 0
notifications true
notification_topic notifications129
# 配置用户名密码
remote_username lxy129
remote_password lxy129

...

重新启动128的mosquitto服务。

再次测试

128发送消息

root@ubuntu:~# mosquitto_pub -t "topic/128" -m "i'm 128, msg to 128" -u lxy128 -P lxy128
128结果

这里也可以看到notifications129 1, 说明129连接正常

root@ubuntu:/etc/mosquitto# mosquitto_sub -t "#" -v -u lxy128 -P lxy128
notifications129 1
notifications130 1
notifications131 1
topic/128 i'm 128, msg to 128
129结果

现在129上可以正常收到消息了。

root@ubuntu:~# mosquitto_sub -t "#" -v -u lxy129 -P lxy129
notifications129 1
topic/128 i'm 128, msg to 128

以上是关于2018-11-14-mqtt-mosquitto系列10之配置桥接用户名密码验证的主要内容,如果未能解决你的问题,请参考以下文章

2018-11-14-mqtt-mosquitto系列10之配置桥接用户名密码验证