4

我需要能够以编程方式管理 supervisord 设置。此外,系统上的任何用户都不能访问 supervisord 的配置。因此,需要以某种方式确保通信安全。

我知道 supervisord 以 XML-RPC 的形式提供编程访问。我阅读了文档并尝试以多种方式使用它,但我一直遇到问题。

  1. Introduction page 上,文档建议为 XML-RPC 接口运行 HTTP 服务器,并使用 Python 标准库xmlrpclib与之通信。这里有两个问题:

    • supervisord.conf的inet_http_server指令仅包括用户名、密码和端口作为设置。没有加密连接的选项。
    • xmlrpclib 甚至不支持用户名和密码。当我使用语法username:password@host:port时,我得到IOError: unsupported XML-RPC protocol. 正如您在文档页面上的示例中看到的那样,没有进行身份验证。
  2. 由于 UNIX 套接字是安全的,我认为[unix_http_server]使用 xmlrpclib 连接是一个好主意。不过,我不知道身份验证是如何工作的,而且 xmlrpclib 只支持网络 HTTP/HTTPS 服务器。

  3. 文档中的另一页提到了一个supervisor.rpcinterface模块。不过,我无法在 Python 中访问这样的东西。为了收集更多关于为什么会这样的信息,我用 Pip 重新安装了 supervisord。sudo pip install --upgrade supervisor. 在 pip 输出中,我看到了Skipping installation of /usr/local/lib/python2.6/dist-packages/supervisor/__init__.py (namespace package). 我不知道为什么它会跳过命名空间包的安装。

我应该如何以编程方式安全地与 supervisord 通信?

4

1 回答 1

1

Supervisor 支持在 Unix 域套接字上设置权限的选项。

http://supervisord.org/configuration.html#unix-http-server-section-example

我不知道细节,但您应该能够像 supervisorctl.py 一样通过 UNIX 域套接字调用 xmlrpc 接口。它正在调用 options.getServerProxy() 来获取 xmlrpclib.ServerProxy 对象。

https://github.com/Supervisor/supervisor/blob/master/supervisor/supervisorctl.py#L188

于 2011-10-28T16:32:55.237 回答