Eigener Check über SSH

Hi Dominic,

du kannst dir für die Abfrage einen special agent bauen. Hierzu kannst du das Python Modul paramiko verwenden. Diese Modul ist als Library mit in checkmk enthalten. Du kannst damit eine Session aufbauen , deine Befehle absetzen und Parsen, und die Session wieder beenden. Hie die Klasse die ich dafür verwende (Cisco WLC):

class wlcssh:
    def __init__(self, server, user, passwd):
        self.wlc_session = paramiko.SSHClient()
        self.wlc_session.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        self.wlc_session.connect(server, port='22', username=user, password=passwd) 

    def login(self):
        self.wlc_ssh_class = self.wlc_session.invoke_shell()
        time.sleep(0.1)
        self.wlc_ssh_class.send('admin'+'\n')
        time.sleep(0.1)
        self.wlc_ssh_class.send('password'+'\n')
        time.sleep(0.1)
        self.wlc_ssh_class.send('config paging disable'+'\n')
        time.sleep(0.1)
        strip_login_text = self.wlc_ssh_class.recv(1024).decode('utf-8')

    def logout(self):
        self.wlc_ssh_class.send('logout'+'\n')
        time.sleep(0.1)
        strip_login_text = self.wlc_ssh_class.recv(1024).decode('utf-8')

    def data(self, q):
        return self.run(q)

    def run(self,query):
        data = []
        output = ""
        outarr = ["--More"]
        self.wlc_ssh_class.send(query + "\n")
        time.sleep(0.1)
        while "--More" in outarr[-1]:
            output = self.wlc_ssh_class.recv(16384).decode('utf-8', 'backslashreplace')
            outarr = output.split("\r\n")
            data += outarr[:-2]
            self.wlc_ssh_class.send("\n")
            time.sleep(0.1)
    return data

Vielleicht hilft dir das weiter.

Viele Grüße,
Christian

2 Likes