使用python netmiko模块批量配置Cisco、华为、H3C路由器交换机(支持 telnet 和 ssh 方式)

0. 当前环境

  • 外网电脑Python版本:3.8.5(安装后不要删除安装包,以后卸载的时候用这个)
  • 外网电脑安装netmiko第三方库:cmd中输入pip install netmiko
  • 内网电脑环境:无法搭建python环境,需外网电脑完成后打包成exe使用
    • 外网电脑cmd中输入:cd C:\USERS\Admin\DESKTOP\批量配置
    • 外网电脑cmd中回车后接着输入:pyinstaller -F telnet.py
  • Windows下如何使用tree命令生成目录树
  • 未打包的文件结构图
C:\USERS\Admin\DESKTOP\批量配置(注:文件夹存放位置和文件夹名称无所谓)
│  config_cisco.txt(注:根据下面的代码来说,这个文件必须写这个名字,改名的同时需要改掉代码里的)
│  config_h3c.txt(注:根据下面的代码来说,这个文件必须写这个名字,改名的同时需要改掉代码里的)
│  config_huawei.txt(注:根据下面的代码来说,这个文件必须写这个名字,改名的同时需要改掉代码里的)
│  resource.xlsx(注:根据下面的代码来说,这个文件必须写这个名字,改名的同时需要改掉代码里的)
│  telnet.py(注:名称随便起)
│ 
  • 打包后的文件结构图
C:\USERS\Admin\DESKTOP\批量配置(注:文件夹存放位置和文件夹名称无所谓)
│  config_cisco.txt(注:根据下面的代码来说,这个文件必须写这个名字,改名的同时需要改掉代码里的)
│  config_h3c.txt(注:根据下面的代码来说,这个文件必须写这个名字,改名的同时需要改掉代码里的)
│  config_huawei.txt(注:根据下面的代码来说,这个文件必须写这个名字,改名的同时需要改掉代码里的)
│  resource.xlsx(注:根据下面的代码来说,这个文件必须写这个名字,改名的同时需要改掉代码里的)
│  telnet.spec(打包exe产生的)
│
├─build(打包exe产生的)
│  └─telnet
│      │  Analysis-00.toc
│      │  base_library.zip
│      │  EXE-00.toc
│      │  PKG-00.toc
│      │  PYZ-00.pyz
│      │  PYZ-00.toc
│      │  telnet.pkg
│      │  warn-telnet.txt
│      │  xref-telnet.html
│      │
│      └─localpycs
│              pyimod01_archive.pyc
│              pyimod02_importers.pyc
│              pyimod03_ctypes.pyc
│              pyimod04_pywin32.pyc
│              struct.pyc
│
└─dist(打包exe产生的)
       telnet.exe(最后内网使用的是这个exe文件,只用把这个exe复制出来,使用就好)

1. python环境搭建

  • 安装:安装python3.x版本,新点比较好
    • 超详细的Python安装和环境搭建教程
  • 卸载:最好是找到python该版本的官方安装包,点击安装包上的卸载
    • python最详细的安装与完全卸载
  • 多版本安装:比较复杂,之前如果下载安装过python2.x版本,最好直接装python3.x版本
    • python双版本共存安装(保姆级教程)
  • 安装第三方库报错可参考
    • 安装matplotlib时提示找不到合适版本
  • 内网环境使用,搭建python环境较为繁琐,可以将python脚本打包成exe使用
    • Python脚本打包成exe,看这一篇就够了!

2. 相关文件和代码

2.1 resource.xlsx

  • 表头和表中内容如图所示(以H3C设备为例)
    • Cisco设备的type:cisco_ios
    • H3C设备的type:hp_comware
    • Huawei设备的type:huawei
      在这里插入图片描述

2.2 config_h3c.txt

  • 只需要直接开始敲命令就好,不用输入en进入特权模式然后conf t(针对Cisco),也不用输入保存命令
    在这里插入图片描述

2.3 telnet.py

  • 华为设备的保存命令比较特别,其他设备可以按照代码中的华为保存命令自己调整
from netmiko import ConnectHandler, exceptions
from openpyxl import load_workbook
import time
date = time.strftime('%Y%m%d', time.localtime()) #赋予date变量
# 读取excel内设备列表信息
def check_and_get_dev_list(filename, sheet_name):
    excel_information = []
    sheet_header = []
    wb = load_workbook(filename)
    sh = wb[sheet_name]
    # 获取最大行数
    row = sh.max_row
    # 获取最大列数
    column = sh.max_column
    data = []
    # 获取表头写入列表中方便调用
    for data_1 in range(1, column+1):
        get_sheet_header = sh.cell(row=1, column=data_1).value
        sheet_header.append(get_sheet_header)
    # 第一行为表头, 此处 row +1 是pyton循环时不读取最后一个数
    for row_1 in range(2, row + 1):
        # 存储一行信息
        sheet_data_1 = dict()
        # 逐行读取表中的数据
        for b in range(1, column + 1):
            cell = sh.cell(row=row_1, column=b).value
            # 将数据已字典形式写入 sheet_data_1 中
            # if cell != None:
            sheet_data_1[sheet_header[b-1]] = cell
        excel_information.append(sheet_data_1)
    for i in excel_information:
        if i['ip'] != None:
            data.append(i)
    return data
 
#获取excel数据并整合成dev字典
def get_dev():
    res = check_and_get_dev_list('./resource.xlsx', 'Sheet1')
    devices = []
    for i in res:
        if i['protocol'] == 'telnet':
            i['type'] = i['type']+'_telnet'
        dev = {'device_type':i['type'],
               'host': i['ip'],
               'username': i['username'],
               'password': i['password'],
               'secret': i['enpassword'],
               'port': i['port'],}
        devices.append(dev)
    return devices

# 批量配置交换机
def devices_add_conf(devices=''):
    # 循环登录设备添加配置
    for dev in devices:
        try:
            with ConnectHandler(**dev) as connect:
                print('\n----------成功登录到:' + dev['host'] + '----------')
                connect.enable()
                if 'cisco_ios' in dev['device_type']:
                    output = connect.send_config_from_file('config_cisco.txt')
                    print(output)
                    save_output = connect.save_config()
                    print(save_output)
                elif 'huawei' in dev['device_type']:
                    output = connect.send_config_from_file('config_huawei.txt')
                    print(output)
                    save_output = connect.save_config(cmd='save',confirm=True,confirm_response='y')
                    print(save_output)
                    save_output = connect.save_config(cmd='y',confirm=True)
                    print(save_output)
                    save_output = connect.save_config(cmd='\n',confirm=True)
                    print(save_output)
                elif 'hp_comware' in dev['device_type']:
                    output = connect.send_config_from_file('config_h3c.txt')
                    print(output)
                    save_output = connect.save_config()
                    print(save_output)
                else:
                    print('error')
        # 连接异常处理
        except exceptions.NetmikoAuthenticationException:
            e1 = open(f'{date}.txt','a')
            print(date,dev['host'],'[Error 1] 登录验证失败!\n',file = e1)
            e1.close
            continue
        except exceptions.NetmikoTimeoutException:
            e2 = open(f'{date}.txt','a')
            print(date,dev['host'],'[Error 2] 超时,目标不可达!\n',file = e2)
            e2.close
            continue
        except exceptions.ReadTimeout:
            e3 = open(f'{date}.txt','a')
            print(date,dev['host'],'[Error 3] 读取超时,请检查enable密码是否正确!\n',file = e3)
            e3.close
            continue
        except:
            e4 = open(f'{date}.txt','a')
            print(date,dev['host'],'[Error 4] Unknown error.\n',file = e4)
            e4.close
            continue
    return 1
# 运行主程序
if __name__ == '__main__':
    dev = get_dev()
    devices_add_conf(devices=dev)

3. 使用H3C模拟器简单测试

  • 可以使用H3C模拟器进行简单测试(相当于电脑和模拟器中的两个交换机在同一网段)
  • 模拟器中的两个交换机配置telnet
telnet server enable
local-user h3c class manage
	password simple h3c123456789
	service-type telnet
	authorization-attribute user-role network-operator
	authorization-attribute user-role level-15
line vty 0 4
	authentication-mode scheme
	user-role network-admin
	user-role network-operator 
  • 通过电脑的cmd可以telnet连接到这两个交换机

在这里插入图片描述

4. 验证

  • 可以看到运行程序后的窗口中,显示保存成功
    • 将各厂商的路由器交换机原本保存成功的提示放在了窗口,各厂商的提示略有不同
  • 登录交换机,比较当前配置与下次启动的配置文件的差别
    • 华为:compare configuration
    • H3C:display current-configuration diff
  • 可以简单看一下
    • 华三交换机的配置变化查看命令?
    • 华为交换机、路由器的存储设备
    • 华为FAQ-交换机怎么保存配置

5. 参考文献——netmiko的使用

5.1 netmiko简单使用

  • Python批量备份交换机配置+自动巡检
  • Python 网络自动化: 使用 Netmiko 模块批量下发华为、思科交换机配置
  • python netmiko库H3C交换机自动化
  • 批量更改华为交换机配置 by Python
  • 网络工程师的Python之路 – Netmiko终极指南

5.2 netmiko复杂讲解

  • device_type
'device_type': 'huawei_serial',  # 指定设备类型,串口方式登陆,默认连接COM1,波特率9600
'device_type': 'huawei_telnet',  # 指定设备类型,该类型适用于huawei设备,telnet方式
'device_type': 'huawei',  # 该类型适用于huawei设备,ssh方式
  • Netmiko最强攻略——两万字吐血整理,网工玩转自动化
  • netmiko模块,华为、H3C批量配置

5.3 使用netmiko后保存交换机配置

  • 从Netmiko、Scrapli配置保存问题——谈分析陌生Package的方法
  • H3C网络设备配置保存(Netmiko处理设备提示命令)
  • 【翻译】Netmiko4:read_timeout(2022年3月2日)
  • Netmiko最强攻略——两万字吐血整理,网工玩转自动化

5.4 使用netmiko后的输出显示(目前没有该方面的困扰,程序能跑起来就很不错了😂)

  • 使用netmiko模块连接H3C设备(闭坑——H3C设备的分屏显示)

6. 如用的参考文献

  • 好像学了点什么,但确实这次没用上

6.1 import paramiko

  • 基于Python通过SSH方式批量备份交换机
  • 对上一篇👆参考博客出现的问题进行了一定的补充:基于Python通过SSH方式批量备份交换机(华为+Cisco)【转载】
  • python写一个SSH批量登录华为交换机,新增vlan的脚本
  • python 自动化运维脚本,可以巡检思科,华三,等网络设备
  • 使用python批量备份华为交换机配置文件(eNSP模拟器)
  • 利用Python通过telnet、ssh连接交换机、路由器等设备配置备份 第2版(粗略版)…
  • python-telnet登录华为交换机并执行命令

6.2 import telnetlib/telnetlib3

6.2.1 简单(import telnetlib)

  • Python telnet模块说明
  • Python3 telnetlib 库使用方法
  • python通过telnetlib模块远程连接交换机
  • 使用python3(Telnetlib)批量登录交换机

6.2.2 复杂(import telnetlib3)

  • 网络工程师学Python-telnetlib改进版本Telnetlib3

6.3 奇怪的python用法(如用,感觉用处不大)

  • H3C HCL模拟器S5820使用Python脚本直接生效新导入配置文件的案例

7. 总结与展望

  • 《网络工程师的Python之路》教学文章、视频汇总
  • 【网工手艺】专栏入口(总目录 | 我全开源写作 | 你别买盗版书)
  • NetDevOps加油站

在这里插入图片描述

  • 表情包来源:醒神仔微博超话

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/272710.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

怎么实现Servlet的自动加载

在实际开发时,有时候会希望某些Servlet程序可以在Tomcat启动时随即启动。但在默认情况下,第一次访问servlet的时候,才创建servlet对象。 如果servlet构造函数里面的代码或者init方法里面的代码比较多,就会导致用户第一次访问serv…

Chrome插件精选 — 前端工具

Chrome实现同一功能的插件往往有多款产品,逐一去安装试用耗时又费力,在此为某一类型插件挑选出比较好用的一款或几款,尽量满足界面精致、功能齐全、设置选项丰富的使用要求,便于节省一个个去尝试的时间和精力。 1. FeHelper(前端助…

分布式下如何实现统一日志系统?

在业务系统开发中,日志的收集和分析很重要,特别是在进行故障分析时,日志记录得好,可以帮我们快速定位问题原因。在互联网分布式系统下,日志变得越来越分散,数据规模也越来越大,如何更好地收集和…

现代 NLP:详细概述,第 1 部分:transformer

阿比吉特罗伊 一、说明 近五年来,随着 BERT 和 GPT 等思想的引入,我们在自然语言处理领域取得了巨大的成就。在本文中,我们的目标是逐步深入研究改进的细节,并了解它们带来的演变。 二、关注就是你所需要的 2017 年,来…

环保行业的物联网升级:采用钡铼技术R10

随着环境保护意识的增强和可持续发展的迫切需求,物联网技术在环保行业中扮演着越来越重要的角色。为了满足环保监测和数据采集的需求,钡铼技术R10在物联网应用中具有独特的优势。本文将探讨R10的参数和功能,并阐述其在环保行业中的应用前景。…

主流级显卡的新选择,Sparkle(撼与科技)Intel Arc A750兽人体验分享

▼前言 对于玩家而言,英特尔独显的出现不仅打破了NVIDIA与AMD双雄天下的局面,而且旗下的Arc A系列显卡还拥有不俗的做工性能以及颇具优势的价格,无论是升级或者是装新机都非常合适。如果要在Arc A系列当中选一个性能不俗,能够满足…

anaconda prompt进入虚拟环境 打开spyder

目录 1.查看有多少虚拟环境 2.conda create 指令创建新的虚拟环境 3.进入虚拟环境 4.spyder进入虚拟环境 5.退出虚拟环境 6.删除虚拟环境 1.查看有多少虚拟环境 打开anaconda prompt,输入 conda env list 2.conda create 指令创建新的虚拟环境 conda cre…

LinkedList与链表

[本节目标] 1.ArrayList的缺陷 2.链表 3.链表相关oj题 4.LinkedList的模拟实现 5.LinkedList的使用 6.ArratList和LinkedList的区别 1. ArrayList的缺陷 上篇博客已经熟悉了ArrayList的使用,并且进行了简单模拟实现,ArrayList底层使用数组来储存元素: public class Ar…

K8S 中对 Windows 节点的利用

目录 漏洞概述 漏洞详情 ​编辑 漏洞验证 补丁分析 在集群中探索 参考资料 在许多组织中,所运行的很大一部分服务和应用是 Windows 应用。Windows 容器提供了一种封装进程和包依赖项的方式,从而简化了 DevOps 实践,令 Windows 应用程序…

深入探究MongoDB:从基础到实战,一个全面的指南

MongoDB:海量数据库的介绍 定义与命名由来: MongoDB源自词“humongous”,意味着“巨大无比”。因此,MongoDB可译为“海量数据库”。类型: MongoDB是一种非关系型(NoSQL)数据库。与传统的关系型数据库相比,它的显著特点是不使用SQL语句。数据结构更灵活,没有固定的数据类…

装饰模式(单一责任)

Decorator(装饰模式:单一责任模式) 链接:装饰模式实例代码 解析 目的 在某些情况下我们可能会“过度地使用继承来扩展对象的功能”,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性&#xff…

【C语言】指针详解(四)

目录 1.assert断言 2.指针的使用和传址调用 2.1strlen的模拟使用 2.2传值调用和传址调用 1.assert断言 assert.h头文件定义了宏 assert(),用于在运行时确保程序符合指定条件,如果不符合,就报错终止运行。这个宏常常被称为“断言”。 例如…

【Azure 架构师学习笔记】- Power Platform(1) - 简介

本文属于【Azure 架构师学习笔记】系列。 本文属于【Power Platform】系列。 Power Platform 它是一个SaaS平台,支持和延伸M365, Dynamics 365和Azure甚至其他第三方服务。主要提供低代码,自动化,数据驱动和定制化业务逻辑的服务…

NFC物联网一次性口令认证解决方案

物联网是由无线传感器网络、射频识别(RadioFrequency Identificalion,RFID)网络、互联网等构成的一种复合型网络,具有部分终端设备体积小、存储和计算处理能力弱的特点。顾名思义,物联网就是“物物相连的互联网”,也就是说,物联网…

Spark与Hadoop的关系和区别

在大数据领域,Spark和Hadoop是两个备受欢迎的分布式数据处理框架,它们在处理大规模数据时都具有重要作用。本文将深入探讨Spark与Hadoop之间的关系和区别,以帮助大家的功能和用途。 Spark和Hadoop简介 1 Hadoop Hadoop是一个由Apache基金会…

工具系列:TimeGPT_(1)获取token方式和初步使用

文章目录 介绍获取Token用法数据的重要要求使用DateTime索引推断频率。 介绍 Nixtla的TimeGPT是一种用于时间序列数据的生成式预训练预测模型。TimeGPT可以在没有训练的情况下,仅使用历史值作为输入,为新的时间序列生成准确的预测。TimeGPT可以用于各种…

亚马逊云科技 re:Invent 大会 - ElastiCache Serverless 模式来袭

大会介绍 亚马逊云科技的 re:Invent 大会是一年一度的,面向全球技术开发者科技盛会。几乎每次都会发布云科技、云计算等相关领域的产品重磅更新,不但将时下主流热门的技术不断整合,也未将来的发展标明了方向。 亚马逊云科技开发者社区为开发…

安卓系统和鸿蒙系统,哪个更适合老人使用

安卓系统和鸿蒙系统各有优势,但总体来说,鸿蒙系统可能更适合老人使用。以下是几个原因: 1.易用性: 鸿蒙系统针对老年人的使用习惯和需求进行了优化设计。它采用了更加直观、简洁的界面设计,降低复杂度并提升操作效率。…

Vue在页面上添加水印

第一步:在自己的项目里创建一个js文件;如图所示我在在watermark文件中创建了一个名为waterMark.js文件。 waterMark.js /** 水印添加方法 */ let setWatermark (str1, str2) > {let id 1.23452384164.123412415if (document.getElementById(id) …

为什么深度学习神经网络可以学习任何东西

下图你所看到的,是著名的曼德尔布罗特集,我们可以见证这个集合呈现出的复杂形态: 要理解神经网络如何学习曼德尔布罗特集,我们首先需要从最基础的数学概念讲起:什么是函数?函数本质上是一个将输入转化为输出…
最新文章