在网络运维中,设备配置的定期备份是保障网络稳定、实现快速故障恢复的生命线。然而,手动备份不仅耗时费力,还容易因疏忽而遗漏,带来潜在风险。本文将详细讲解如何利用网络设备(以H3C/HPE Comware平台为例)内嵌的Python能力,结合计划任务(Scheduler),打造一个全自动、无人值守的配置备份方案。通过本教程,您将学会编写一个智能备份脚本,并配置设备以固定周期将其配置文件安全、可靠地备份至TFTP服务器,文件名自动包含设备名与时间戳,实现高效、规范的配置管理。
在日常的网络运维工作中,您是否遇到过以下痛点:
自动化配置备份正是解决这些问题的利器。它能确保配置的一致性、及时性和可追溯性,将网络工程师从重复劳动中解放出来,专注于更有价值的工作,同时为网络构建起一道坚实的安全防线。本文将通过一个实战案例,手把手教您实现这一目标。
在开始之前,请确保您具备以下条件:
我们的自动化备份方案的核心逻辑非常清晰,可以分为以下几个步骤:
backup.py
),核心功能是获取设备名和当前时间,然后动态构建一条TFTP上传命令。backup.py
脚本到本地文件系统。python backup.py
命令。(注:此处可用流程图工具生成图片后替换链接,以增强可视化效果)
首先,我们需要创建一个Python脚本,它将是整个自动化任务的“大脑”。
backup.py
。# -*- coding: utf-8 -*-
# 导入与设备交互和处理时间所需的模块
import time
# 注意:根据设备系统版本不同,此模块名可能是 comware 或 platformtools
# 如果下方脚本运行报错 "ImportError", 请尝试将 "comware" 修改为 "platformtools"
import comware as p
# 1. 获取当前时间并格式化为字符串,用于生成唯一的文件名
# 格式如:2023-10-27-15-30-00
current_time = time.strftime('%Y-%m-%d-%H-%M-%S')
# 2. 定义CLI命令,用于查询设备当前的系统名称(sysname)
cli_get_sysname = 'display current-configuration | include sysname'
# 3. 执行命令并处理返回结果,精准提取出系统名称
# p.CLI(cli).get_output() 会返回一个列表,包含命令的输出行
# [1] 代表取返回结果的第二行 (通常第一行是命令本身的回显)
# .split(' ')[2] 表示用空格分割该行,并取第三个元素,即设备名称
try:
output = p.CLI(cli_get_sysname).get_output()
# 健壮性优化:处理可能的空输出或格式变化
if len(output) > 1 and len(output[1].split(' ')) > 2:
sysname = output[1].split(' ')[2].strip()
else:
# 如果无法获取sysname, 使用一个默认名称
sysname = "UnknownDevice"
except Exception as e:
# 异常处理:记录错误并使用默认名称
p.CLI('logbuffer debugging "Backup script failed to get sysname"')
sysname = "ErrorDevice"
# 4. 构建最终的TFTP上传命令
# 将启动配置文件(startup.cfg)上传到 IP 为 2.0.1.1 的TFTP服务器
# 文件名格式为:设备名-时间戳.cfg (例如: Switch-A-2023-10-27-15-30-00.cfg)
tftp_server_ip = '2.0.1.1' # 将此处IP替换为您的TFTP服务器实际IP
backup_filename = sysname + '-' + current_time + '.cfg'
cli_tftp_put = 'tftp ' + tftp_server_ip + ' put startup.cfg ' + backup_filename
# 5. 执行最终的TFTP上传命令
p.CLI(cli_tftp_put)
# 6. (可选) 记录一条日志,表示备份成功
p.CLI('logbuffer debugging "Configuration backup successful to ' + backup_filename + '"')
代码深度解析:
import comware as p
: 这是与Comware设备底层交互的专用模块,提供了执行CLI命令的能力。time.strftime(...)
: Python标准库函数,用于将时间格式化为我们需要的字符串格式,确保每次备份的文件名都独一无二。sysname = output[1].split(' ')[2]
: 这是脚本的精髓之一。display current-configuration | include sysname
的输出通常是 sysname Switch-A
,通过空格分割后,第三个元素 ([2]
) 正是设备名。try...except
块,以防止因display
命令输出格式意外变化或为空时导致脚本崩溃。p.CLI(...)
: 核心函数,用于在设备的CLI环境中执行指定的命令字符串。重要提示:
tftp_server_ip = '2.0.1.1'
修改为您自己TFTP服务器的真实IP地址。backup.py
文件,并将其放置到TFTP服务器的根目录下。脚本准备就绪后,登录到您的网络设备进行部署和调度。
# 登录设备,进入用户视图
<H3C>
# 1. 从TFTP服务器下载脚本到设备闪存 (flash:)
# 确保设备与TFTP服务器网络可达
<H3C> tftp 2.0.1.1 get backup.py
Press CTRL+C to abort.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 750 100 750 0 0 15000 0 --:--:-- --:--:-- --:--:-- 15000
File will be transferred in binary mode.
Writing file...Done.
# 进入系统视图,准备配置计划任务
<H3C> system-view
System View: return to User View with Ctrl+Z.
# 2. 创建一个名为 "auto_backup" 的任务(job)
[H3C] scheduler job auto_backup
# 3. 定义任务要执行的具体命令,即运行python脚本
# command 1 表示这是该job的第一个(也是唯一一个)命令
[H3C-job-auto_backup] command 1 python backup.py
# 4. 退出任务配置视图
[H3C-job-auto_backup] quit
# 5. 创建一个名为 "daily_backup" 的计划(schedule)
[H3C] scheduler schedule daily_backup
# 6. 将刚才创建的 "auto_backup" 任务关联到此计划
[H3C-schedule-daily_backup] job auto_backup
# 7. 设置计划的执行频率
# 示例1: 每天凌晨3点整执行
# [H3C-schedule-daily_backup] time at 03:00:00
# 示例2: 每隔24小时重复执行一次
[H3C-schedule-daily_backup] time repeating interval 24:00:00
# 8. 退出并保存配置
[H3C-schedule-daily_backup] quit
[H3C] quit
<H3C> save force
温馨提示:
time repeating interval
的参数格式非常灵活,可以是HH:MM:SS
,也可以是D H:M:S
。例如interval 0 0:30:0
表示每30分钟执行一次。请根据您的备份策略,参考设备命令手册设置最合适的时间。
在等待计划任务自动触发前,强烈建议先手动执行一次脚本,以确保整个流程没有问题。
手动触发脚本
在设备的用户视图下,直接运行 python
命令:
<H3C> python backup.py
观察设备回显 如果脚本和网络配置都正确,您会看到类似TFTP文件传输的进度条:
<H3C> tftp 2.0.1.1 put startup.cfg H3C-2023-10-27-16-10-25.cfg
Press CTRL+C to abort.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2850 0 0 100 2850 0 13571 --:--:-- --:--:-- --:--:-- 18037
检查TFTP服务器
最后,也是最关键的一步:登录到您的TFTP服务器,检查其文件目录下是否成功生成了名为 H3C-2023-10-27-16-10-25.cfg
(设备名和时间会有所不同)的备份文件。如果文件存在且内容无误,恭喜您,自动化备份系统已成功部署!
通过本文的引导,我们成功利用Python脚本和设备自身的计划任务功能,构建了一套“一劳永逸”的自动化配置备份系统。该方案不仅提升了运维效率,更通过规范化、周期化的备份机制,极大地增强了网络的可靠性。
未来可以如何改进?
希望本篇文章能为您打开网络自动化运维的大门。技术的魅力在于化繁为简,让我们一起探索更多可能,让网络管理变得更智能、更高效!
版权声明:本文为CSDN博主「奶油话梅糖 」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。