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.
的帮助下,我终于能够解决它
- 像这样订阅:
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"
客户名单将在订阅端给出。
您需要在主题周围加上单引号(而不是双引号),因为 shell 会尝试将 $CONTROL
替换为很可能为空的环境变量
mosquitto_pub -h localhost -p 1883 -t '$CONTROL/dynamic-security/v1' -m "{"command":listClients}" -u "mqtt-admin" -P "pwd"
我正在使用 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.
- 像这样订阅:
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"
客户名单将在订阅端给出。
您需要在主题周围加上单引号(而不是双引号),因为 shell 会尝试将 $CONTROL
替换为很可能为空的环境变量
mosquitto_pub -h localhost -p 1883 -t '$CONTROL/dynamic-security/v1' -m "{"command":listClients}" -u "mqtt-admin" -P "pwd"