我正在使用 Mosquitto 的内置安全插件来定义对我的代理的访问。到目前为止,我已经使用mosquitto_ctrl <connection options> dynsec <command> ...
命令设置了客户端、角色和组。(见蚊子)
代理在 Docker 容器中运行。但是,我想从另一个 Docker 容器(即外部)管理动态安全插件。准确地说,我想使用管理员凭据连接到代理(例如使用python paho)并发布对安全插件的修改。
我认为这必须是可能的,因为它在文档中明确提到:
初始安装后插件的所有控制都是通过 $CONTROL/dynamic-security/v1 中的 MQTT 主题 API。这允许构建集成,但不是人们直接使用的最佳选择。
例如,列出我想象中的所有客户,例如
mosquitto_pub -h localhost -p 1883 -t $CONTROL/dynamic-security/v1 -m "{"command":listClients}" -u "mqtt-admin" -P "pwd"
和
mosquitto_sub -h localhost -p 1883 -t $CONTROL/dynamic-security/v1 -u "mqtt-admin" -P "pwd"
不幸的是,我无法让它工作。有人知道如何将插件用作 API 吗?
谢谢!
PS:我在mosquitto github repo上使用发布命令找到了更多提示,说消息应该如下所示::
{
"commands":[
{
"command": "listClients",
"verbose": false,
"count": -1, # -1 for all, or a positive integer for a limited count
"offset": 0 # Where in the list to start
}
]
}
编辑:
我终于能够在hardillb的帮助下解决它。
- 像这样订阅:
mosquitto_sub -h localhost -p 1883 -t '$CONTROL/dynamic-security/v1/#' -u "mqtt-admin" -P "pwd"
- 像这样发布:
mosquitto_pub -h localhost -p 1883 -t '$CONTROL/dynamic-security/v1' -m '{"commands": [{"command": "listClients"}]}' -u "mqtt-admin" -P "pwd"
然后将在订阅端提供客户端列表。