导入必要的模块

from ncclient import manager # 用于与网络设备建立NETCONF连接 import paramiko # 用于通过SSH与网络设备建立连接 import time # 用于等待命令执行完成 import datetime # 用于生成文件名

定义设备IP地址、用户名和密码

DEVICE_IP = '10.1.0.6' USERNAME = 'python' PASSWORD = 'Huawei@123'

定义Device类

class Device(): # 初始化方法 def init(self, ip, usr, pwd): self.hostname = ip # 设备IP地址 self.username = usr # 登录设备的用户名 self.password = pwd # 登录设备的密码 self.client = self._get_connect() # 通过SSH与设备建立连接 self.cli = self.client.invoke_shell() # 打开交互式Shell self.cli.send('n\n') # 发送回车键 self.cli.send('screen-length 0 temporary\n') # 发送命令,设置输出为不分页

# 通过SSH与设备建立连接
def _get_connect(self):
    ssh_con = paramiko.SSHClient()  # 创建SSHClient实例
    ssh_con.set_missing_host_key_policy(paramiko.AutoAddPolicy())  # 设置自动添加主机密钥
    ssh_con.connect(hostname=self.hostname, username=self.username, password=self.password, timeout=10)  # 通过SSH连接到设备
    return ssh_con  # 返回SSH连接对象

# 检查风扇状态
def check_fan_status(self, output):
    lines = output.split('\n')  # 将命令输出按行分割成列表
    fan_status = {}  # 初始化字典,用于保存风扇状态
    for line in lines:
        if 'Fan' in line:  # 如果该行包含'Fan'字符串
            fan_name = line.split(':')[0]  # 获取风扇名称
            fan_state = line.split(':')[1].strip()  # 获取风扇状态
            if 'Normal' not in fan_state:  # 如果风扇状态不是'Normal'
                fan_status[fan_name] = fan_state  # 将风扇名称和状态保存到字典中
    if not fan_status:  # 如果所有风扇状态都正常
        print('All fans are working normally!')  # 打印提示信息
    else:  # 如果有风扇状态异常
        print('Fan status:')  # 打印提示信息
        for fan_name, fan_state in fan_status.items():  # 遍历所有异常风扇的名称和状态
            print(f'{fan_name}: {fan_state}')  # 打印风扇名称和状态

# 打开交互式Shell,执行命令,检查风扇状态,将输出写入文件
def open(self):
    with open('command.txt', 'r') as f:  # 打开文件,读取命令列表
        cmd_list = f.readlines()  # 将命令列表读取到列表中
        for cmd in cmd_list:  # 遍历所有命令
            self.cli.send(cmd)  # 发送命令
    time.sleep(1)  # 等待命令执行完成
    COMMAND = self.cli.recv(65535).decode('utf-8')  # 获取命令输出,转换为字符串

    # 输出命令输出
    print(COMMAND)

    # 检查风扇状态
    self.check_fan_status(COMMAND)

    # 将命令输出写入文件
    timestamp = datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')  # 根据当前时间生成时间戳
    filename = f'{DEVICE_IP}_{timestamp}.txt'  # 根据设备IP和时间戳生成文件名
    with open(filename, 'w') as f:  # 创建文件,写入命令输出
        f.write(COMMAND)

# 关闭SSH连接
def close(self):
    self.client.close()

# 保存设备配置
def save_config(self):
    with manager.connect(host=self.hostname, port=830, username=self.username, password=self.password, hostkey_verify=False, device_params={'name': 'huawei'}) as m:
        m.copy_config(source='running', target='startup')
        print('Device configuration saved successfully!')

# 下载设备配置
def download_config(self):
    with manager.connect(host=self.hostname, port=830, username=self.username, password=self.password, hostkey_verify=False, device_params={'name': 'huawei'}) as m:
        config = m.get_config(source='running').data_xml
        timestamp = datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')  # 根据当前时间生成时间戳
        filename = f'{DEVICE_IP}_{timestamp}.xml'  # 根据设备IP和时间戳生成文件名
        with open(filename, 'w') as f:  # 创建文件,写入配置
            f.write(config)
        print(f'Device configuration downloaded to {filename} successfully!')

如果该脚本被直接运行

if name == 'main': device = Device(DEVICE_IP, USERNAME, PASSWORD) # 创建Device对象,传入设备IP、用户名和密码 device.open() # 打开Shell,执行命令,检查风扇状态,将输出写入文件 device.save_config() # 保存设备配置 device.download_config() # 下载设备配置 device.close() # 关闭SSH连

以下面的代码为基础添加保存设备配置与下载配置# 导入必要的模块from ncclient import manager # 用于与网络设备建立NETCONF连接import paramiko # 用于通过SSH与网络设备建立连接import time # 用于等待命令执行完成import datetime # 用于生成文件名# 定义设备IP地址、用户名和密码DEVICE_IP = 1010

原文地址: http://www.cveoy.top/t/topic/fbPK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录