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

news2025/2/2 10:49:07

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.coloradmin.cn/o/1337946.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【kafka消息里会有乱序消费的情况吗?如果有,是怎么解决的?】

文章目录 什么是消息乱序消费了?顺序生产,顺序存储,顺序消费如何解决乱序数据库乐观锁是怎么解决这个乱序问题吗 保证消息顺序消费两种方案固定分区方案乐观锁实现方案 前几天刷着视频看见评论区有大佬问了这个问题:你们的kafka消…

Bug:Too many open files【ulimit限制】

Bug:Too many open files 今天在开发某个下载功能时,发现文件总是下载到250多个程序就挂掉,同时会打崩服务器,查看错误日志发现报:too many open files. 思路:根据错误信息可以知道打开的文件数过多&#x…

【滑动窗口】【map】LeetCode:76最小覆盖子串

作者推荐 【二叉树】【单调双向队列】LeetCode239:滑动窗口最大值 本文涉及知识点 滑动窗口 题目 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。 注意: 对…

【工具】windeployqt 在windows + vscode环境下打包

目录 0.背景简介 1.windeployqt简介 2.打包具体过程 1)用vscode编译,生成Release文件夹(也有Debug文件夹,但是发布版本一般都是用Release) 2)此时可以看下Release文件夹内,一般是.exe可执行…

PYTHON基础:最小二乘法

最小二乘法的拟合 最小二乘法是一种常用的统计学方法,用于通过在数据点中找到一条直线或曲线,使得这条直线或曲线与所有数据点的距离平方和最小化。在线性回归中,最小二乘法被广泛应用于拟合一条直线与数据点之间的关系。 对于线性回归&…

OSPF多区域配置-新版(12)

目录 整体拓扑 操作步骤 1.基本配置 1.1 配置R1的IP 1.2 配置R2的IP 1.3 配置R3的IP 1.4 配置R4的IP 1.5 配置R5的IP 1.6 配置R6的IP 1.7 配置PC-1的IP地址 1.8 配置PC-2的IP地址 1.9 配置PC-3的IP地址 1.10 配置PC-4的IP地址 1.11 检测R5与PC1连通性 1.12 检测…

C# WPF上位机开发(扩展上位机之外的技能)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 如果把c# wpf只是看成是一个做界面的框架,那确实有点狭隘了。单独的上位机软件,如果不需要上下游的支持,没有与…

vue3+ts 可视化大屏无限滚动table效果实现

注意:vue3版本需使用 vue3-seamless-scroll npm npm install vue3-seamless-scroll --save页面引入 TS import { Vue3SeamlessScroll } from "vue3-seamless-scroll";代码使用(相关参数可参考:https://www.npmjs.com/package/vu…

Unity与Android交互通信系列(3)

在上两篇文章中,我们已经能够通过直接使用Java,或者通过AndroidJavaClass、AndroidJavaObject这两个类实现在Unity端和Android原生端的通信。这已经可以解决很多问题,但这种方式不够模块化,不够优雅。 在实际使用中,将…

【宇宙猜想】AR文创入驻今日美术馆、北京天文馆等众多展馆,在AR互动中感受科技魅力!

近日,由「宇宙猜想」推出的AR系列文创产品先后入驻今日美术馆、北京天文馆、国家自然博物馆、上海天文馆、国家海洋馆、中华手工展馆等各大馆场并与其展开相关合作。 「宇宙猜想」致力于创造虚拟空间价值,用AR技术与文创产品碰撞出新的火花,为…

Qt Designer 常见需求

窗口 参考链接 【转载】Qt Designer 使用全攻略_qtdesigner使用-CSDN博客 QT屏幕自适应自动布局,拖动窗口自动变大变小(一)_qt布局随窗口大小变化-CSDN博客 pyqt5设置高分辨率以及icon显示模糊解决办法_python qt图显示不清晰-CSDN博客 窗…

RHCE9学习指南 第11章 网络配置

11.1 网络基础知识 一台主机需要配置必要的网络信息,才可以连接到互联网。需要的配置网络信息包括IP,子网掩码,网关和DNS。 11.1.1 IP地址 在计算机中对IP的标记使用的是32bit的二进制,例如, 11000000 10101000 00…

Python 爬虫之下载歌曲(二)

获取深夜emo云歌单信息 文章目录 获取深夜emo云歌单信息前言一、基本流程二、代码编写1.基本要素代码2.获取歌名和链接信息3.获取歌曲的作者信息4.将上面三个列表遍历保存 三、效果展示 前言 换个平台,爬歌深夜网抑云平台的歌单的相关信息,关于作者、歌…

Advanced IP Scanner - 网络扫描器

Advanced IP Scanner - 网络扫描器 1. Advanced IP ScannerReferences https://www.advanced-ip-scanner.com/cn/ ​ 可靠且免费的网络扫描器可以分析 LAN。该程序可扫描所有网络设备,使您能够访问共享文件夹和 FTP 服务器,(通过 RDP 和 Radmin) 远程控制…

[Angular] 笔记 9:list/detail 页面以及@Output

1. Output input 好比重力,向下传递数据,list 传给 detail,smart 组件传给 dumb 组件,父组件传给子组件。input 顾名思义,输入数据给组件。 output 与之相反,好比火箭,向上传递数据或事件。ou…

安装kafka

静态文件安装(单机) 解压到指定目录(解压到 /usr) tar -zxf kafka_2.11-2.2.0.tgz -C /usr/ 到指定的解压目录下 cd /usr/kafka_2.11-2.2.0/ 配置主机名 查看是否配置了HOSTNAME vim /etc/sysconfig/network 没有就新增 HOSTNA…

当 Redis 遇上 Serverless

亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术,观点,和项目,并将中国优秀开发者或技术推荐给全球云社区。如果你还没有关注/收藏…

【番外】在Windows安装Airsim/UE4踩坑合集

在Windows安装Airsim/UE4踩坑合集 1.安装过程中一定要确保Epic Games Launcher是英文环境,保存路径什么的也尽量是英文。2.UE4中的虚幻引擎一定要安装4.27版本以上的,不然的话最后运行vs的时候会报语法错误,网上根本查不到的那种错误。换了版…

云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)

目录 一、理论 1.K8S集群升级 2.环境 3.升级策略 4.master1节点迁移容器运行时(docker → containerd) 5.master2节点迁移容器运行时(docker → containerd) 6.node1节点容器运行时迁移(docker → containerd) 7.升级集群计划(v1.23.14 → v1.24.1&#…

阿里云OpenSearch-LLM智能问答故障的一天

上周五使用阿里云开放搜索问答版时,故障了一整天,可能这个服务使用的人比较少,没有什么消息爆出来,特此记录下这几天的阿里云处理过程,不免让人怀疑阿里云整体都外包出去了,反应迟钝,水平业余&a…