今天来谈谈一个我自己觉得比较实用的设备配置备份方式吧。我们用paramiko登录待备份的网元,之后网元FTP到一台服务器上,把自己配置文件传送到这台FTP服务器上。这种方式的优势在于备份网元无需任何额外设置即可实现文件传递
实验拓扑
【SSH客户端】Win10 虚拟网卡,IP 为 192.168.11.2/24,桥接到云彩,Python所在。备份操作时做FTP服务端。
【透明交换机】SW1(启动即可,无需配置,给云彩扩展端口使用)。
【SSH 服务端】L3Sx,vlanif 1 的 IP 为 192.168.11.1x/24。备份操作时做FTP客户端。
注:交换机型号是S5700。
实验背景
日常较多的备份方式有两种:
① 登录设备执行display cur,然后抓取回显,保存成配置文件。
② FTP/SCP等方式登录网元,拷贝配置文件 flash:/vrpcfg.zip。
方法①效率较低;
方法②需要每台网元都开启FTP服务器功能,安全性不高。
打破下惯性思维,我们能不能把方法②的客户端和服务器角色给反过来呢?这样不就只需一台服务器开启FTP server功能。待备份的网元都当FTP客户端角色即可,无需任何额外配置。
梳理一下FTP服务器信息:
1、地址:192.168.11.2,网元的备份文件推送到这台设备,即WIN10真机,python所在。
2、目录:C:\Users\lidong\Desktop\lab6\
4、FTP密钥:123456
第 2 步,手工测试FTP推送备份文件
我们登上L3S1(192.168.11.11),从网元手工登录ftp服务器
(192.168.11.2),执行一次备份文件推送。
ftp 192.168.11.2
python
123456
put vrpcfg.zip 192.168.11.11_vrpcfg.zip
quit
至此,我们实验目的(1)完成。
第 3 步,创建Python脚本文件
我准备了如下的python代码。这里强调下,这实验我们主要是讨论FTP推送备份文件,因此,我把代码最简化,去掉了try-expect,设备表文件,指令表文件,交互输入用户名密钥等功能。大家在实际生产中需要配套上其它功能代码块,方能更好的适配生产环境。其它功能块大家可查阅paramiko前序几篇文章。
import paramiko import time username = 'python' password = '123' iplist = ['192.168.11.11','192.168.11.12','192.168.11.13','192.168.11.14','192.168.11.15'] for ip in iplist: ssh_client = paramiko.SSHClient() ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh_client.connect(hostname=ip,username=username,password=password,look_for_keys=False) print('=-=-=-=-=-=-=-=-=-=-=-=-=-=-=') print('已经成功登录交换机' + ip) command = ssh_client.invoke_shell() command.send('ftp 192.168.11.2\n') time.sleep(0.5) command.send('python\n') time.sleep(0.5) command.send('123456\n') time.sleep(0.5) command.send('bin\n') command.send('put vrpcfg.zip '+ip+'_vrpcfg.zip'+'\n') time.sleep(0.5) command.send('quit\n') time.sleep(0.5) output = command.recv(65535).decode('GB2312') print(output) ssh_client.close() |
第 4 步,运行Python脚本
先清空一下backup文件夹,运行脚本,截图如下。
我们打开任意一个vrpcfg.zip文件看看,其实就是网元配置文件。