Python 批量备份网络设备配置--netmiko

本文作者分享了如何使用Python和netmiko库通过SSH抓取网络设备配置,避开FTP难题,详细描述了从尝试不同方案到最终成功的经历。重点介绍了Excel数据导入和FTP命令文件的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不得不说Python真是个好东西,当你面临着大量的重复性工作时,程序基本可以帮你完美解决。

最近有一大堆设备想备份一下配置,但是由于项目才开始,没有网管平台。所以,想偷个懒写个小python,解放自己的双手(写程序反而更累了,hhh)。本文只是作为日常技能提升记录,不是专业开发,大佬请多多指教。

最开始萌生这个想法的时候有三个思路,但是最后只有一个走通了:

  1. 在设备上启用FTP服务器,本地PC登陆网络设备下载配置文件。
  2. 在本地PC机使用3CDaemon创建FTP服务器,网络设备通过FTP登陆本地PC上传配置文件。
  3. 本地PC通过SSH登陆网络设备,通过display  current-configuration 获取回显,保存到本地。

最终只有第三个方案成功了。第一个方案,由于网络设备上不让启用FTP服务,直接搁浅;第二个方案,本地搭建FTP服务后,通过Python程序向网络设备上传登陆FTP,部分设备无法登陆(华为设备可以通过send_command_timing()刷入FTP配置登陆,但是H3C设备死活不行,总是报错配置命令不存在;求大佬解答)。第三个方案,就是刷入配置,然后获取回显保存文件完事儿(正好之前刷网络配置的代码稍微改改就可以)。

整程序使用的是netmiko这个库,官方也有相关的教程:

官方指导手册:https://pynet.twb-tech.com/blog/automation/netmiko.html

这个程序主要涉及到两个文件需要读取,一个是记录设备IP地址及设备厂商命名的Excel表格,最终的配置文件名与设备命名保持一致;另外一个是记录FTP登陆命令的Txt文件(TXT文件改成其他配置命令就可以变为配置刷入程序了)。

Excel表格模板:

 

命令文件:

注意:如果,最终的配置文件显示不全,则说明需要改一下屏幕长度。增加一条screen-length disable命令就行。

 

代码如下:代码解释写在注释里了

from netmiko import ConnectHandler
import openpyxl
import threading
import os
import time

#读取Excel文件并格式化,将各个设备的信息存入字典。
def Read_excel(file_name):
    wb = openpyxl.load_workbook(file_name)
    sheet = wb.get_sheet_by_name('Sheet1')
    row = sheet.max_row
    column = sheet.max_column
    device_list = {}
    for i in range(2,row+1):
        device_list['device{0}'.format(i-1)] = []
        for j in range(1,column+1):
            vla = sheet.cell(row = i,column = j).value
            device_list['device{0}'.format(i-1)].append(vla)
    return device_list

#执行命令并输出的函数
def Exe_command(net_connect,cmd):
    print('正在执行命令:',cmd)
    # send_command_timing 沿通道发送命令,返回输出(基于时序)。就是紧接着回显后边执行。
    result = net_connect.send_command_timing(cmd) 
    #send_command 向下发送命令,返回输出(基于模式)。就是在回显的下一行刷入命令。
    #result = net_connect.send_command(cmd)
    return result

#SSH登陆设备,输入配置文件内容
def Connect(device,Backup_file_name):
    print('正在连接{0}\n'.format(device['host']))
    net_connect = ConnectHandler(**device)
    net_connect.enable()  #输入启用
    save = open(Backup_file_name,'w')

    #读取配置文件,配置文件存放在当前目录下
    for i in open('command_backup.txt','r'):
        cmd = i.replace('\n',' ')
        result = Exe_command(net_connect,cmd)
        save.write(result)
    save.close()
    # Exe_command(net_connect,'put flash:/vrpcfg.zip {0}.zip'.format(Backup_file_name))
    # Exe_command(net_connect,'quit')
    net_connect.disconnect() 

def Huawei(ip):  
    huawei = {
        'device_type':'huawei',
        'host':ip,
        'username':'admin',
        'password':'admin',
    }
    return huawei
def H3c(ip): 
    h3c = {
        'device_type':'hp_comware',
        'host':ip,
        'username':'admin',
        'password':'admin',
    }
    return h3c

#初始化函数,主要用于设备类型的判断,配置备份文件名的构造
def Init(ip_file):
    device_list = Read_excel(ip_file)
    for device_name in device_list.keys():
        try:
            if device_list[device_name][1] == 'huawei':
                device = Huawei(device_list[device_name][0])
                #配置文件名前加了一个二级目录network_config
                Backup_file_name = 'network_config\\'+device_list[device_name][2]+'.txt'
                Connect(device,Backup_file_name)
            elif device_list[device_name][1] == 'h3c': 
                device = H3c(device_list[device_name][0])
                Backup_file_name = 'network_config\\'+device_list[device_name][2]+'.txt'
                Connect(device,Backup_file_name)
            else:
                print('未定义设备!')
                pass
        except Exception as e:
            print('连接超时:',e)
            pass 
        time.sleep(1)

#def start_exe(Promgram):
#    os.system(Promgram)

if __name__ == '__main__':
    # Program = 'D:\\3CDaemon\\3CDaemon.EXE'
    # thread = threading.Thread(target=start_exe,args=(Program,))
    # thread.start()
    Init('ip_add.xlsx')

 

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值