当前位置: 首页 > news >正文

使用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_columndata = []# 获取表头写入列表中方便调用for data_1 in range(1, column+1):get_sheet_header = sh.cell(row=1, column=data_1).valuesheet_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]] = cellexcel_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.closecontinueexcept exceptions.NetmikoTimeoutException:e2 = open(f'{date}.txt','a')print(date,dev['host'],'[Error 2] 超时,目标不可达!\n',file = e2)e2.closecontinueexcept exceptions.ReadTimeout:e3 = open(f'{date}.txt','a')print(date,dev['host'],'[Error 3] 读取超时,请检查enable密码是否正确!\n',file = e3)e3.closecontinueexcept:e4 = open(f'{date}.txt','a')print(date,dev['host'],'[Error 4] Unknown error.\n',file = e4)e4.closecontinuereturn 1
# 运行主程序
if __name__ == '__main__':dev = get_dev()devices_add_conf(devices=dev)

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

  • 可以使用H3C模拟器进行简单测试(相当于电脑和模拟器中的两个交换机在同一网段)
  • 模拟器中的两个交换机配置telnet
telnet server enable
local-user h3c class managepassword simple h3c123456789service-type telnetauthorization-attribute user-role network-operatorauthorization-attribute user-role level-15
line vty 0 4authentication-mode schemeuser-role network-adminuser-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加油站

在这里插入图片描述

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

相关文章:

  • QT 输入框输入限制 正则表达式限制 整理
  • Midjourney v6 正式发布,AI创新工坊同步更新
  • 与擎创科技共建一体化“数智”运维体系,实现数字化转型
  • 在k8s中将gitlab-runner的运行pod调度到指定节点
  • 【学习笔记】Java函数式编程03 Stream流-终结操作
  • 在ajax中使用callback
  • CNVD原创漏洞审核和处理流程
  • Python in Visual Studio Code 2023年12月发布
  • 基于 Linux 的批量上传本地 Git 仓库到 Github 的实践
  • Dash中的callback的使用 多input 6
  • 人工智能_机器学习078_聚类算法_概念介绍_聚类升维_降维_各类聚类算法_有监督机器学习_无监督机器学习---人工智能工作笔记0118
  • 个性化定制的知识付费小程序,为用户提供个性化的知识服务,知识付费saas租户平台
  • Maven 项目依赖仓库配置详解:pom.xml 中的 repositories 与 Maven 配置文件的调用顺序
  • 13.鸿蒙HarmonyOS App(JAVA)文本框组件按钮点击提示
  • ARCGIS PRO SDK GeometryEngine处理独立几何图形的函数
  • 「面试题」如何实现一个圣杯布局?
  • Apache的80端口被占用以及访问时报错403
  • codis proxy处理流程
  • es6
  • JavaScript标准库系列——Math对象和Date对象(二)
  • jquery cookie
  • Node项目之评分系统(二)- 数据库设计
  • PHP变量
  • 对超线程几个不同角度的解释
  • 类orAPI - 收藏集 - 掘金
  • 那些年我们用过的显示性能指标
  • 如何设计一个微型分布式架构?
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​插件化DPI在商用WIFI中的价值
  • #1015 : KMP算法
  • #pragma data_seg 共享数据区(转)
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (二)windows配置JDK环境
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (转)Mysql的优化设置
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET Micro Framework初体验(二)
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .Net 高效开发之不可错过的实用工具
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .net 中viewstate的原理和使用
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .考试倒计时43天!来提分啦!
  • @Autowired注解的实现原理
  • @RestControllerAdvice异常统一处理类失效原因
  • [ 转载 ] SharePoint 资料
  • [4.9福建四校联考]
  • [ActionScript][AS3]小小笔记
  • [Avalon] Avalon中的Conditional Formatting.
  • [AX]AX2012开发新特性-禁止表或者表字段
  • [FTP]pureftp部署和优化