HP MSA 2312 XML API “Запрошенный несанкционированный доступ”

Я пытаюсь записать пользовательский Плагин Nagios для контроля HP MSA2312fc через XML HTTP API. Я могу успешно войти в систему через/api/login/{login_hash}, но всегда получать ошибку "Несанкционированный доступ, запрошенный" при попытке получить некоторые данные (т.е. через/api/show/system). Я попробовал команды на другом MSA, но это всегда - та же ошибка.

# Successful login
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RESPONSE>
<OBJECT basetype="status" name="status" oid="1">
    <PROPERTY name="response-type">success</PROPERTY>
    <PROPERTY name="response-type-numeric">0</PROPERTY>
    <PROPERTY name="response">deb9b907d11459757af645bd859e01aa</PROPERTY>
    <PROPERTY name="return-code">1</PROPERTY>
</OBJECT>
</RESPONSE>

# Error
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RESPONSE>
<OBJECT basetype="status" name="status" oid="1">
    <PROPERTY name="response-type">error</PROPERTY>
    <PROPERTY name="response-type-numeric">1</PROPERTY>
    <PROPERTY name="response">Unauthorized access requested</PROPERTY>
    <PROPERTY name="return-code">6</PROPERTY>
</OBJECT>
</RESPONSE>

Я могу уже успешно контролировать HP MSA P2000 G3 через API XMl без любых проблем.

Я использую Python 2 для плагина. Присоединенный соответствующие нормы для входа в систему и чтения данных с P2000 G3 MSA:

import hashlib
import urllib2
from xml.etree import ElementTree

# Log into MSA
def msa_login(hostname, username, password):
    def create_login_hash(username, password):
        login_string = "{0}_{1}".format(username, password)
        return hashlib.md5(login_string).hexdigest()

    login_hash = create_login_hash(username, password)
    url_login = "http://{0}/api/login/{1}".format(hostname, login_hash)
    req_login = urllib2.Request(url_login)
    response_login = urllib2.urlopen(req_login)
    #print(response_login.read())
    login = ElementTree.parse(response_login).getroot()

    # Get sessionid
    for property in login.findall('./OBJECT/PROPERTY'):
        if property.attrib['name'] == 'response-type' and property.text != 'success':
            print("CRITICAL - Couldn't login to MSA")
            exit(NAGIOS_CRITICAL)

        if property.attrib['name'] == 'response':
            return property.text


# Read system data
def parse_system(hostname, sessionid):
    url_system = "http://{0}/api/show/system".format(hostname)
    req_system = urllib2.Request(url_system)
    req_system.add_header('sessionKey', sessionid)
    response_system = urllib2.urlopen(req_system)
    system = ElementTree.parse(response_system).getroot()
    [...] # parsing data



Кто-то может дать мне подсказку, почему я всегда получаю несанкционированное сообщение? Или имеет рабочий фрагмент кода? Я знаю, что Telnet имеет режим XML API, но я не использовал бы его по различным причинам.

3
задан 18 February 2015 в 14:33
1 ответ

Вам необходимо отправить Cookie в заголовке:

Key Value
Cookie  wbisessionkey=ee7426964a6d14788ba86f77764733bf; wbiusername=monitoruser

что-то вроде этого (код не проверен):

cookie = "wbiusername={0}; wbisessionkey={1}".format(username,sessionid);
req_system.add_header('Cookie', cookie);
3
ответ дан 3 December 2019 в 06:33

Теги

Похожие вопросы