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_iosH3C设备的type:hp_comwareHuawei设备的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 configurationH3C: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加油站

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

参考链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: