API HP MSA 2312 XML "Accesso non autorizzato richiesto"

Sto cercando di scrivere un plugin Nagios personalizzato per monitorare un HP MSA2312fc tramite l'API XML HTTP. Posso accedere correttamente al sistema tramite / api / login / {login_hash} ma sempre get l'errore "Accesso non autorizzato richiesto" quando cerchi di get alcuni dati (cioè via / api / show / system). Ho provato i comandi su MSA diversi ma è sempre lo stesso errore.

# 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-numbersc">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-numbersc">1</PROPERTY> <PROPERTY name="response">Unauthorized access requested</PROPERTY> <PROPERTY name="return-code">6</PROPERTY> </OBJECT> </RESPONSE> 

Posso già monitorare con successo un HP MSA P2000 G3 tramite l'API XMl senza alcun problema.

  • i gruppi di contatto nagios a check_mk
  • Plancia semplice di Nagios
  • Nagios: submit solo la notifica quando tutti i 4 host sono in discesa
  • Informazioni sullo stato completo nella notifica e-mail di Nagios?
  • differenza tra snmpwalk e check_snmp_int
  • Statistiche Nagios per Notifiche / Avvisi
  • Sto utilizzando Python 2 per il plugin. Allegato è codice pertinente per l'accesso e la lettura dei dati da un MSA P2000 G3:

     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 

    Può qualcuno mi dà un suggerimento perchè ottengo sempre il messaggio non autorizzato? O ha uno snippet di codice di lavoro? So che Telnet ha una modalità API XML, ma preferisco non utilizzarlo per vari motivi.

    One Solution collect form web for “API HP MSA 2312 XML "Accesso non autorizzato richiesto"”

    Devi mandare il cookie nell'intestazione:

     Key Value Cookie wbisessionkey=ee7426964a6d14788ba86f77764733bf; wbiusername=monitoruser 

    qualcosa di simile (codice non testato):

     cookie = "wbiusername={0}; wbisessionkey={1}".format(username,sessionid); req_system.add_header('Cookie', cookie); 
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.