网络自动化入门用Python零基础备份华为交换机配置从零开始的网络自动化之旅刚接触网络设备维护的新人常常对命令行界面感到陌生和畏惧。那些闪烁的光标、复杂的命令和看似神秘的配置参数往往让人望而却步。但你知道吗通过Python这个强大的工具即使是完全没有编程经验的网络小白也能轻松实现交换机配置的自动备份。这不仅能让你的工作更高效还能为后续学习网络自动化打下坚实基础。本文将带你一步步完成从环境搭建到脚本运行的全过程。我们不会深入复杂的编程概念而是聚焦于一个具体、可操作的目标用Python脚本自动备份华为交换机的配置。整个过程就像组装乐高积木一样简单——你只需要按照步骤把各个部分连接起来就能看到成果。1. 环境准备搭建Python工作台1.1 安装Python和Pip首先我们需要在电脑上安装Python环境。Python就像是一个万能工具箱而Pip则是这个工具箱里的应用商店让我们能轻松安装各种扩展功能。访问Python官网(https://www.python.org/downloads/)下载最新版本的安装包。安装时务必勾选Add Python to PATH选项这样系统才能识别Python命令。安装完成后打开命令提示符(Windows)或终端(Mac/Linux)输入以下命令验证安装是否成功python --version如果看到类似Python 3.x.x的版本信息说明安装成功。接下来安装Pip如果安装Python时没有自动安装python -m ensurepip --upgrade1.2 安装必要的Python库我们需要三个关键库来完成交换机备份任务paramiko用于通过SSH连接交换机pandas用于读取设备信息表格openpyxl支持pandas处理Excel文件在命令提示符中运行以下命令一次性安装它们pip install paramiko pandas openpyxl安装完成后可以通过以下命令查看已安装的库pip list2. 准备工作创建设备信息表2.1 制作交换机信息模板为了让脚本知道要备份哪些交换机我们需要准备一个Excel表格包含以下基本信息IP地址管理员账号密码设备命名设备型号192.168.1.1adminpassword核心交换S5735提示可以将此表格保存为交换机设备信息表.xlsx并放在桌面上以便脚本读取2.2 表格填写注意事项IP地址确保填写正确的交换机管理IP账号密码使用具有足够权限的管理员账号设备命名建议使用有意义的名称如核心交换、接入层1等设备型号填写准确的型号有助于后续管理3. 运行备份脚本3.1 获取并理解脚本将以下Python脚本保存为backup_switch.py文件import paramiko import pandas as pd import os from datetime import datetime import time import socket def read_device_info(): file_path os.path.join(os.path.expanduser(~), Desktop, 交换机设备信息表.xlsx) return pd.read_excel(file_path) def get_local_ip(): s socket.socket(socket.AF_INET, socket.SOCK_DGRAM) try: s.connect((10.255.255.255, 1)) IP s.getsockname()[0] except Exception: IP 127.0.0.1 finally: s.close() return IP def create_folder(): timestamp datetime.now().strftime(%Y%m%d%H%M%S) folder_name f{timestamp}_交换机备份 folder_path os.path.join(os.path.expanduser(~), Desktop, folder_name) os.makedirs(folder_path, exist_okTrue) return folder_path def setup_ftp(ssh, local_ip): commands [ display ftp-server configuration\n, ftp server enable\n, fftp server acl permit source ip {local_ip}\n ] ssh.send(commands[0]) time.sleep(2) output ssh.recv(65535).decode(utf-8) if FTP server is not configured in output: for command in commands[1:]: ssh.send(command) time.sleep(1) def export_config(ip, username, password, device_info, folder_path): client paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(ip, usernameusername, passwordpassword) local_ip get_local_ip() with client.invoke_shell() as ssh: setup_ftp(ssh, local_ip) commands [display current-configuration\n, save\n] for command in commands: ssh.send(command) time.sleep(5) output ssh.recv(65535).decode(utf-8) timestamp datetime.now().strftime(%Y%m%d%H%M%S) filename_base f{device_info[设备命名]}_{device_info[设备型号]}_{timestamp} with open(os.path.join(folder_path, f{filename_base}.txt), w) as file_txt: file_txt.write(output) with open(os.path.join(folder_path, f{filename_base}.cfg), w) as file_cfg: file_cfg.write(output) client.close() def main(): folder_path create_folder() device_info read_device_info() for index, row in device_info.iterrows(): export_config(row[IP地址], row[管理员账号], row[密码], row, folder_path) if __name__ __main__: main()3.2 执行备份操作确保交换机设备信息表.xlsx已放在桌面打开命令提示符导航到脚本所在目录运行以下命令开始备份python backup_switch.py脚本运行后会在桌面创建一个以时间戳命名的文件夹里面包含所有交换机的配置文件格式为TXT和CFG两种。4. 常见问题排查4.1 连接失败的可能原因网络不通检查电脑是否能ping通交换机IPSSH服务未开启确认交换机已开启SSH服务账号权限不足使用具有足够权限的管理员账号防火墙拦截检查防火墙是否阻止了SSH连接4.2 脚本运行错误处理模块导入错误确保已正确安装所有依赖库尝试重新安装pip install --force-reinstall paramiko pandas openpyxlExcel读取错误检查文件路径和名称是否正确确认Excel文件没有被其他程序占用备份文件为空增加命令执行后的等待时间检查交换机是否支持使用的命令5. 进阶优化建议5.1 增加日志记录功能为了更好追踪备份过程可以在脚本中添加日志记录import logging logging.basicConfig( levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s, filenameswitch_backup.log ) # 在关键步骤添加日志记录 logging.info(f开始备份交换机 {row[设备命名]})5.2 定时自动备份使用系统任务计划(Windows)或cron(Linux/Mac)设置定时任务Windows使用任务计划程序设置每天运行脚本Linux/Mac在crontab中添加类似以下条目0 2 * * * /usr/bin/python3 /path/to/backup_switch.py5.3 备份文件管理为避免备份文件过多占用空间可以添加自动清理旧备份的功能import glob import os def clean_old_backups(days30): backup_folder os.path.join(os.path.expanduser(~), Desktop) for folder in glob.glob(os.path.join(backup_folder, *_交换机备份)): folder_time datetime.strptime(os.path.basename(folder).split(_)[0], %Y%m%d%H%M%S) if (datetime.now() - folder_time).days days: import shutil shutil.rmtree(folder)