0

我正在使用 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的帮助下解决它。

  1. 像这样订阅:
mosquitto_sub -h localhost -p 1883 -t '$CONTROL/dynamic-security/v1/#' -u "mqtt-admin" -P "pwd"
  1. 像这样发布:
mosquitto_pub -h localhost -p 1883 -t '$CONTROL/dynamic-security/v1' -m '{"commands": [{"command": "listClients"}]}' -u "mqtt-admin" -P "pwd"

然后将在订阅端提供客户端列表。

4

1 回答 1

1

您需要在主题周围加上单引号(而不是双引号),因为 shell 将尝试替换$CONTROL 为最有可能为空的环境变量

mosquitto_pub -h localhost -p 1883 -t '$CONTROL/dynamic-security/v1' -m "{"command":listClients}" -u "mqtt-admin" -P "pwd"
于 2022-01-25T22:54:33.323 回答