MQTT 动态安全插件 API 控制 - client/role/group 管理使用 publish/subscribe 命令

MQTT dynamic security plugin API control - client/role/group management using publish/subscribe commands

我正在使用 Mosquitto 的内置安全插件来定义对我的代理的访问。 到目前为止,我已经使用 mosquitto_ctrl <connection options> dynsec <command> ... 命令设置了客户端、角色和组。 (参见 mosquitto

代理在 Docker 容器中 运行。 但是,我想从另一个 Docker 容器(即从外部)管理动态安全插件。 准确地说,我想使用管理员凭据连接到代理(例如 python paho)并将修改发布到安全插件。

我认为这一定是可能的,因为在 documentation 中明确提到:

All control of the plugin after initial installation is through the MQTT topic API at $CONTROL/dynamic-security/v1. This allows integrations to be built, but isn't the best choice for people to use directly.

例如,为了列出我想象中的所有客户,使用类似

的东西
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?
谢谢!

P.S.: 我在 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"

客户名单将在订阅端给出。

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

mosquitto_pub -h localhost -p 1883 -t '$CONTROL/dynamic-security/v1' -m "{"command":listClients}" -u "mqtt-admin" -P "pwd"