百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

netmiko实验-windows任务计划+python脚本周期性自动备份设备配置

liuian 2025-08-31 03:57 25 浏览

本期实验续接上一篇“netmiko实验-pandas+netmiko+多线程批量备份交换机配置文件”,本期实验利用windows任务计划结合上一期的backup.py脚本来实现无人值守,周期性自动备份交换机配置文件。

一、实验拓扑


二、实验需求

1、利用windows任务计划来周期性执行backup.py脚本,实现无人值守自动备份配置文件,以每隔5分钟备份一次配置文件为演示

2、backup.py脚本执行后,在当前路径下自动创建“

./backup_config/yyyy-mm-dd”目录用于存放每天备份的配置文件;

3、利用pandas读取设备清单“devices.xlsx”中设备信息,结合netmiko登录设备采集配置信息,并写入至txt文件;

4、将认证失败、不可达IP信息写入至txt文件。

说明:其中192.168.1.5为用户名错误,192.168.1.6和192.168.1.7为IP不可达

三、实验代码

from pathlib import Path
from netmiko import ConnectHandler
from netmiko.ssh_exception import AuthenticationException
from netmiko.ssh_exception import NetMikoTimeoutException
import pandas as pd
from datetime import datetime
import os
import threading
from pprint import pprint


class BackupConfig(threading.Thread):
    # 获取当前backup.py文件绝对路径
    ABS_FILE_PATH = Path(__file__).resolve()

    # 获取backup.py的上一级目录
    BASE_DIR = Path(__file__).resolve().parent

    # 配置备份路径:将BASE_DIR、backup_config、datetime.now().strftime('%Y-%m-%d')进行拼接得到备份路径
    BACKUP_CONFIG_DIR = Path(BASE_DIR, 'backup_config', datetime.now().strftime('%Y-%m-%d'))

    # 设备清单路径:将将BASE_DIR、'devices.xlsx'拼接得到设备清单devices.xlsx路径
    DEVICE_DIR = Path(BASE_DIR, 'devices.xlsx')

    # 定义存放认证失败、认证超时IP列表
    auth_faild = []
    auth_timeout = []

    def __init__(self, device):
        self.device = device
        super().__init__()

    @classmethod
    def create_backup_dir(cls):
        """
        构建类方法create_backup_dir:创建备份目录,不存在就新建,存在就利旧使用
        """
        if not os.path.exists(cls.BACKUP_CONFIG_DIR):
            os.makedirs(cls.BACKUP_CONFIG_DIR)
            print("备份目录创建成功")
        else:
            print("备份目录已经存在")

    @classmethod
    def get_device_info(cls):
        """
        构建类方法get_device_info:通过pandas从devices.xlsx表中获取设备登录信息,to_dict转成字典形式
        """
        return pd.read_excel(cls.DEVICE_DIR, sheet_name='devices').to_dict(orient='records')

    def run(self):
        """
        重写run方法:备份配置文件
        """
        device_info = {
            'device_type': self.device["platform"],
            'host': self.device["device_name"],
            'ip': self.device["device_ip"],
            'username': self.device["username"],
            'password': self.device["password"],
            'port': self.device["port"],
            'timeout': 300,
            'conn_timeout': 120
        }
        try:
            with ConnectHandler(**device_info) as connect, open(
                    f'{self.BACKUP_CONFIG_DIR}/{self.device["site_name"]}_{self.device["device_name"]}({self.device["device_ip"]}).txt',
                    'w', encoding='utf-8') as backup_config_file:
                print(self.device["device_ip"] + '登录成功')
                output = connect.send_command("dis cur", delay_factor=2)
                backup_config_file.write(output)
                print(self.device["device_ip"] + "备份成功")
        except AuthenticationException:
            self.auth_faild.append(self.device["device_ip"])
        except NetMikoTimeoutException:
            self.auth_timeout.append(self.device["device_ip"])

    @classmethod
    def exception(cls):
        """
        构建类方法exception:将认证失败、认证超时的IP列表信息转字符串写入至auth_faild_log.txt、auth_timeout_log.txt便于查看
        """
        with open(f'{cls.BACKUP_CONFIG_DIR}/auth_faild_log.txt', 'w', encoding='utf-8') as auth_faild_log, open(
                f'{cls.BACKUP_CONFIG_DIR}/auth_timeout_log.txt', 'w', encoding='utf-8') as auth_timeout_log:
            auth_faild_log.write('认证失败IP地址为:\n' + '\n'.join(cls.auth_faild))
            auth_timeout_log.write('认证超时IP地址为:\n' + '\n'.join(cls.auth_timeout))

            print("认证失败IP地址为:\n", cls.auth_faild)
            print("认证超时IP地址为:\n", cls.auth_timeout)


if __name__ == "__main__":
    # # 路径测试
    # # 使用__file__获取backup.py的绝对路径-->C:/Users/Administrator.DESKTOP-HKMFMDS/PycharmProjects/python_practise2/backup/backup.py
    # print(__file__)
    #
    # # 获取backup.py的绝对路径-->C:\Users\Administrator.DESKTOP-HKMFMDS\PycharmProjects\python_practise2\backup\backup.py
    # print(BackupConfig.ABS_FILE_PATH)
    #
    # # 获取backup.py的上一级目录路径-->C:\Users\Administrator.DESKTOP-HKMFMDS\PycharmProjects\python_practise2\backup
    # print(BackupConfig.BASE_DIR)
    #
    # # 获取配置备份路径,将BASE_DIR、backup_config、str(datetime.date.today()进行拼接 --> C:\Users\Administrator.DESKTOP-HKMFMDS\PycharmProjects\python_practise2\backup\backup_config\2023-02-22
    # print(BackupConfig.BACKUP_CONFIG_DIR)
    #
    # # 获取设备清单路径:将BASE_DIR、'devices.xlsx'拼接得到设备清单devices.xlsx路径 --> C:\Users\Administrator.DESKTOP-HKMFMDS\PycharmProjects\python_practise2\backup\devices.xlsx
    # print(BackupConfig.DEVICE_DIR)

    # 二、采集配置
    # 1.创建备份目录
    BackupConfig.create_backup_dir()

    # 2.获取设备登录信息
    devices = BackupConfig.get_device_info()
    # pprint(devices)

    # 3.登录设备采集配置信息
    threads = []
    for device in devices:
        backup = BackupConfig(device)
        backup.start()
        threads.append(backup)
    for t in threads:
        t.join()

    # 4.打印认证失败、认证超时IP信息
    BackupConfig.exception()

四、windows任务计划设置

1、在代码测试无误后,就可以利用windows任务计划来周期性执行backup.py脚本,实现无人值守自动备份配置文件,以每隔5分钟备份一次配置文件为演示(说明:点击backup_config任务"运行"后会执行一次脚本,后续将每隔5分钟备份一次),具体过程如下:

五、备份截图

说明:因之前设置的2023/3/27 21:50:00触发器超时,故将触发器设置为2023/3/27 22:30:00,到时间后触发器就启动,就开始执行脚本,后续每隔5分钟备份一次配置文件。

(1)2023/3/27 22:30的备份配置文件

(2)2023/3/27 22:35的备份配置文件

(3)2023/3/27 22:40的备份配置文件

(4)2023/3/27 22:45的备份配置文件

(4)2023/3/27 22:50的备份配置文件

结束语:实际工作可以通过正则表达式或者textfsmdisplay xxx的半结构化数据解析为结构化数据写入至数据库、csv、excel中,如:堆叠状态信息、设备巡检信息、光模块信息、接口状态、ARP信息、MAC地址信息这些都可以解析成结构化数据,在此推荐两本书《网络工程师的python之路》(第1版),《网络工程师的python之路》(第2版)给大家。

相关推荐

windows2003镜像32位下载(win2003系统镜像)

虚拟光驱装系统,(win7,xp通用)具体步骤一、将从网上下载的win7旗舰版ISO系统文件存放到D盘。二、从网上下载虚拟光驱,打开安装后在任务栏右通知区显示“虚拟DAEMON管理器”图标,在我的电脑...

如何制作表格excel工作表(如何制作表格excel工作表表头)
  • 如何制作表格excel工作表(如何制作表格excel工作表表头)
  • 如何制作表格excel工作表(如何制作表格excel工作表表头)
  • 如何制作表格excel工作表(如何制作表格excel工作表表头)
  • 如何制作表格excel工作表(如何制作表格excel工作表表头)
win10电脑自动更新怎么关闭(win10电脑怎么关闭自动更新系统)

win10老推送win11打开的方法步骤如下,1,首先,打开设置,点击更新和安全2,打开后,点击windows预览体验计划3,打开后,点击开始4,然后按流程进行注册5,注册完成后,点击选择帐户6,然后...

电脑如何下载打印机驱动并安装
  • 电脑如何下载打印机驱动并安装
  • 电脑如何下载打印机驱动并安装
  • 电脑如何下载打印机驱动并安装
  • 电脑如何下载打印机驱动并安装
微软售后维修点(微软售后维修点江门)
  • 微软售后维修点(微软售后维修点江门)
  • 微软售后维修点(微软售后维修点江门)
  • 微软售后维修点(微软售后维修点江门)
  • 微软售后维修点(微软售后维修点江门)
window7下载steam(window7下载一键重装如何恢复网络)

回答如下:要在Windows7上下载Steam,您可以按照以下步骤操作:1.打开您的浏览器,访问Steam官网(https://store.steampowered.com)。2.点击页面右上角...

系统还原没有还原点怎么办(系统还原点不动怎么办)

如果电脑没有创建还原点,就不能使用系统还原来回到之前的状态。但是,可以尝试使用其他备份工具或软件来恢复数据或重建系统。比如,可以使用第三方备份软件来备份重要文件和数据。如果是系统出现问题,可以尝试重新...

正在准备windows(正在准备windows请勿关机怎么办)

这个情况在使用华为电脑时可能会遇到。一般来说,这是因为电脑正在进行系统更新或者安装软件程序等操作,导致启动时间较长。如果电脑显示“正在准备Windows,请勿关闭电源”,则说明电脑正在进行系统更新。...

有win10安装包怎么装系统(win10安装包安装教程)
有win10安装包怎么装系统(win10安装包安装教程)

如果是原版ISO镜像,可以加载到虚拟光驱直接安装。如果是第三方更改的就需要启动盘。个人建议用U盘启动盘来安装。下载一个u盘启动盘程序(优启通、大白菜……),按照提示把它安装到U盘。启动盘制作完毕以后,启动电脑安快捷键选择U盘启动。进入pe后...

2026-01-14 16:37 liuian

gho怎么变成iso文件(gho改成iso)

要将GHO转换为ISO,您需要使用GHO映像转换器软件。以下是执行此操作的步骤:1.下载和安装GHO映像转换器软件。2.运行转换器软件,并单击“打开”按钮。3.在弹出窗口中,选择要转换的GHO...

office和visio安装顺序(office和visio怎么一起安装)

在某些情况下,安装Visio可能会发生与Office365冲突的问题。这是因为Visio和Office365具有不同的版本,可能会导致安装时出现错误或兼容性问题。为了避免这种冲突,...

小白一键装系统(小白一键系统重装)
  • 小白一键装系统(小白一键系统重装)
  • 小白一键装系统(小白一键系统重装)
  • 小白一键装系统(小白一键系统重装)
  • 小白一键装系统(小白一键系统重装)
电脑中病毒的原因(电脑中病毒正常吗)

电脑中毒的原因有以下几方面:1.网页被挂病毒。2.电脑裸奔,无防病毒软件。3.执行一些不安全的程序。4.U盘等不安全介质。5.电脑漏洞不及时补,被后台种毒。为了电脑不中病毒要注意以下几方面:1.更新系...

手机psd转换成jpg最简单方式

可以使用photoshop工具,方法如下:1、首先打开PS软件,然后选择自己需要的JPG格式的图片,在PS中打开。2、接下来先按快捷键“Ctrl+j”将图片复制出来,防止后面操作对原图片有损...

qq好友回复恢复官网(官方qq好友恢复)
  • qq好友回复恢复官网(官方qq好友恢复)
  • qq好友回复恢复官网(官方qq好友恢复)
  • qq好友回复恢复官网(官方qq好友恢复)
  • qq好友回复恢复官网(官方qq好友恢复)