华为5700交换机监控脚本:使用Python实现安全连接、状态监控和配置备份
导入需要的库
import paramiko import ncclient import time import datetime
class Huawei5700: def init(self, ip, username, password): '初始化函数,建立与交换机的安全连接 :param ip: 设备IP地址 :param username: 用户名 :param password: 密码 ' self.ip = ip self.username = username self.password = password self.transport = paramiko.Transport((self.ip, 22)) self.transport.connect(username=self.username, password=self.password) self.session = self.transport.open_session() self.session.get_pty() self.session.invoke_shell() self.channel = self.transport.open_channel(kind='session') self.channel.invoke_shell()
def run_command(self, command_file):
'从文件中读取命令并执行
:param command_file: 命令文件路径
'
with open(command_file, 'r') as f:
commands = f.readlines()
for command in commands:
self.channel.send(command + '\n')
time.sleep(1)
output = self.channel.recv(65535)
return output.decode('utf-8')
def monitor_status(self):
'监控设备的关键运行状态并输出结果
'
status = {}
output = self.run_command('status_commands.txt')
if 'PowerSupply' in output:
status['PowerSupply'] = 'normal'
else:
status['PowerSupply'] = 'faulty'
if 'FAN' in output:
fan_status = output.split('FAN')[-1].split('\n')[1].strip()
if 'Fault' in fan_status:
status['FAN'] = 'faulty'
else:
status['FAN'] = 'normal'
else:
status['FAN'] = 'faulty'
if 'LACP' in output:
status['LACP'] = 'normal'
else:
status['LACP'] = 'faulty'
if 'CPU Usage' in output:
cpu_usage = int(output.split('CPU Usage')[-1].split('\n')[1].strip().split('%')[0])
if cpu_usage <= 80:
status['CPU'] = 'normal'
else:
status['CPU'] = 'overloaded'
else:
status['CPU'] = 'faulty'
if 'Memory Usage' in output:
mem_usage = int(output.split('Memory Usage')[-1].split('\n')[1].strip().split('%')[0])
if mem_usage <= 80:
status['Memory'] = 'normal'
else:
status['Memory'] = 'overloaded'
else:
status['Memory'] = 'faulty'
if 'OSPF State' in output:
ospf_state = output.split('OSPF State')[-1].split('\n')[1].strip()
if 'Full' in ospf_state:
status['OSPF'] = 'normal'
else:
status['OSPF'] = 'faulty'
else:
status['OSPF'] = 'faulty'
return status
def backup_config(self):
'每24h备份一次配置文件,并将其传输到电脑本地
'
current_time = datetime.datetime.now()
if current_time.hour == 0:
self.run_command('backup_config.txt')
with paramiko.Transport((self.ip, 22)) as transport:
transport.connect(username=self.username, password=self.password)
with transport.open_sftp() as sftp:
sftp.get('/config/running-config.cfg', 'running-config.cfg')
def configure_log_host(self, host_ip):
'配置设备日志主机为指定IP地址
:param host_ip: 日志主机IP地址
'
with ncclient.manager.connect(host=self.ip, username=self.username, password=self.password, device_params={'name': 'huawei'}) as device:
device.edit_config(config='''<config>
<logging xmlns='http://www.huawei.com/netconf/vrp' content-version='1.0' format-version='1.0'>
<host>
<host-name>%s</host-name>
<host-ip>%s</host-ip>
</host>
</logging>
</config>''' % (host_ip, host_ip)
原文地址: https://www.cveoy.top/t/topic/n2dX 著作权归作者所有。请勿转载和采集!