monit_auth - meetbill/monit_manager GitHub Wiki

monit 认证

1 monit 配置

set httpd port 5024
    use address 0.0.0.0
    allow admin:monit

2 monit 认证方式

可以通过 requests 和 urllib2 两种方式进行认证,这里推荐使用 urllib2

2.1 urllib2

urllib2.urlopen() 函数不支持验证、cookie 或者其它 HTTP 高级功能。要支持这些功能,必须使用 build_opener() 函数创建自定义 Opener 对象。

创建自定义 Opener 对象
authinfo = urllib2.HTTPBasicAuthHandler()
authinfo.add_password('monit',baseurl,username,password)
opener=urllib2.build_opener(authinfo)

安装 opener 对象作为 urlopen() 使用的全局 opener
urllib2.install_opener(opener)

urllib2.urlopen(self.baseurl,timeout=5)

上面 authinfo.add_password('monit',baseurl,username,password)

add_password(realm,uri,user,passwd)
realm 是与验证相关联的名称或描述信息,取决于远程服务器。uri 是基 URL。user 和 passwd 分别指定用户名和密码。

如何获取 realm

import urllib2

theurl = 'http://127.0.0.1:2812/ping'
req = urllib2.Request(theurl)
try:
    print 'urlopen begin'
    handle = urllib2.urlopen(req)
    print 'urlopen finish'
except IOError, e:
    if hasattr(e, 'code'):
        if e.code != 401:
            print 'We got another error'
            print e.code
        else:
            print 'yes'
            print e.headers
            print e.headers['www-authenticate']
    else:
        print r'the string "code" is not in e'
        print e
else:
    print 'this url can be accessed'

即输出

urlopen begin
yes
Date: Thu, 24 Jan 2019 17:06:17 GMT
Server: monit 5.25.2
Content-Length: 361
Connection: close
Content-Type: text/html
WWW-Authenticate: Basic realm="monit"

2.2 requests

requests 不是 python 自带的库,需要另外安装 easy_install or pip install, 不建议使用

self.baseurl="http://127.0.0.1:2812"
self.auth = requests.auth.HTTPBasicAuth(username, password)
// 通过 respose.status_code 是否为 200 检测是否登陆成功
response = requests.get(self.baseurl,auth=self.auth)

// 获取状态信息,xml 格式
url = self.baseurl + '/_status?format=xml'
response = requests.get(url, auth=self.auth)