简述
通过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 = 1while i < 10:chan.send(cmd)i += 1time.sleep(2)result = chan.recv(65535)result = str(result, encoding='utf-8')return result
清洗数据
返回列表类型
class Regule:def __init__(self, string):self.string = stringdef PwrStatus(self):pattern = re.compile(r'PWR1.*')listP = pattern.findall(self.string)[0][:-2].split() # split以空格分词return listPdef FanStatus(self):pattern = re.compile(r'FAN1.*')listF = pattern.findall(self.string)[0][:-2].split()return listFdef SwitchStatus(self):pattern = re.compile(r'-.*S5730.*')listS = pattern.findall(self.string)[1][:-2].split()return listSdef 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_userself.mail_host = value.mail_hostself.mail_pass = value.mail_passdef sendmail(self, receivers,context):sender = '631643983@qq.com'# receivers = ['fralychen@gmail.com'] # 接收邮件,可设置为你的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

