Python腳本實現交換機狀態信息獲取
簡述
通過paramiko(python ssh包)ssh連接交換機並執行狀態信息命令,將結果通過正則清洗後以郵件形式推送給目標郵箱,過程中涉及包導入、SMTP協議、正則表達式、ssh協議
步驟
安裝ssh包並連接交換機
pip install paramiko
github
def ssh_result(self, cmd):
t = paramiko.Transport(self.ip, self.port)
t.connect(username=self.username, password=self.password)
chan = t.open_session()
chan.settimeout(timeout=15)
chan.get_pty()
chan.invoke_shell()
time.sleep(5)
i = 1
while i < 10:
chan.send(cmd)
i += 1
time.sleep(2)
result = chan.recv(65535)
result = str(result, encoding='utf-8')
return result
清洗數據
返回列表類型
class Regule:
def __init__(self, string):
self.string = string
def PwrStatus(self):
pattern = re.compile(r'PWR1.*')
listP = pattern.findall(self.string)[0][:-2].split() # split以空格分詞
return listP
def FanStatus(self):
pattern = re.compile(r'FAN1.*')
listF = pattern.findall(self.string)[0][:-2].split()
return listF
def SwitchStatus(self):
pattern = re.compile(r'-.*S5730.*')
listS = pattern.findall(self.string)[1][:-2].split()
return listS
def Temperature(self):
pattern = re.compile(r'NA.*[0-9]')
# listTem = pattern.findall(string)[2:][2:].split()
listTem = pattern.findall(self.string)[0][6:].split()
return listTem
郵件發送
借用QQ郵箱的郵件服務器
class mail:
def __init__(self):
value = config.Mailvalue()
self.mail_user = value.mail_user
self.mail_host = value.mail_host
self.mail_pass = value.mail_pass
def sendmail(self, receivers,context):
sender = '[email protected]'
# receivers = ['[email protected]'] # 接收郵件,可設置為你的QQ郵箱或者其他郵箱
message = MIMEText(context, 'plain', 'utf-8')
message['From'] = Header("info_center", 'utf-8')
message['To'] = Header("administrator", 'utf-8')
subject = 'Switch_info'
message['Subject'] = Header(subject, 'utf-8')
try:
smtpObj = smtplib.SMTP()
smtpObj.connect(self.mail_host, 25) # 25 為 SMTP 端口號
smtpObj.login(self.mail_user, self.mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string())
print("郵件發送成功")
except smtplib.SMTPException:
print("Error: 無法發送郵件")
完整代碼地址
github:https://github.com/PyMt/Mm