Python 网络自动化: 使用 Netmiko 模块批量下发华为、思科交换机配置_交换机统一配置下发

100% |█████████████████| 1.5MB 436kB/s

Successfully installed bcrypt-3.1.7 cffi-1.14.0 cryptography-2.9.2 future-0.18.2 netmiko-3.1.1 paramiko-2.7.1 pycparser-
2.20 pynacl-1.4.0 pyserial-3.4 scp-0.13.2 six-1.15.0 textfsm-1.1.0

验证
C:\Users\Administrator> python

import netmiko
#引入模块无报错,说明模块安装成功

Netmiko模块介绍

当前支持设备类型

Arista vEOS
Cisco ASA
Cisco IOS
Cisco IOS-XE
Cisco IOS-XR
Cisco NX-OS
Cisco SG300
HP ProCurve
Juniper Junos
Linux

Alcatel AOS6/AOS8
Apresia Systems AEOS
Calix B6
Cisco AireOS (Wireless LAN Controllers)
CloudGenix ION
Dell OS9 (Force10)
Dell OS10
Dell PowerConnect
Extreme ERS (Avaya)
Extreme VSP (Avaya)
Extreme VDX (Brocade)
Extreme MLX/NetIron (Brocade/Foundry)
HPE Comware7
Huawei
IP Infusion OcNOS
Juniper ScreenOS
Mellanox
MikroTik RouterOS
MikroTik SwitchOS
NetApp cDOT
Nokia/Alcatel SR OS
OneAccess
Palo Alto PAN-OS
Pluribus
Ruckus ICX/FastIron
Ruijie Networks
Ubiquiti EdgeSwitch
Vyatta VyOS

A10
Accedian
Aruba
Ciena SAOS
Citrix Netscaler
Cisco Telepresence
Check Point GAiA
Coriant
Dell OS6
Dell EMC Isilon
Eltex
Enterasys
Endace
Extreme EXOS
Extreme Wing
Extreme SLX (Brocade)
F5 TMSH
F5 Linux
Fortinet
MRV Communications OptiSwitch
MRV LX
QuantaMesh
Rad ETX
Versa Networks FlexVNF

常用方法

net_connect.send_command() #向下发送命令,返回输出(基于模式)
net_connect.send_command_timing() #沿通道发送命令,返回输出(基于时序)
net_connect.send_config_set() #将配置命令发送到远程设备
net_connect.send_config_from_file() #发送从文件加载的配置命令
net_connect.save_config() #将running#config保存到startup#config
net_connect.enable() #输入启用模式
net_connect.find_prompt() #返回当前路由器提示符
net_connect.commit() #在Juniper和IOS#XR上执行提交操作
net_connect.disconnect() #关闭连接
net_connect.write_channel() #通道的低级写入
net_connect.read_channel() #通道的低级写入

参考链接

https://pynet.twb-tech.com/blog/automation/netmiko.html
https://github.com/ktbyers/netmiko

配置 Python 脚本

一、Cisco

编辑文件,文件命名Cisco_Autoconfig.py

#!/usr/bin/python3
#-*- coding:utf-8 -*-

ScriptName: Cisco_Autoconfig.py

Create Date: 2020-07-08 16:35

Modify Date: 2020-07-08 16:35

#***************************************************************#
from netmiko import ConnectHandler,NetmikoTimeoutException,NetmikoAuthenticationException #引入netmiko连接模块、报错模块
import getpass #引入密码模块
import time #引入时间模块
date = time.strftime(‘%Y%m%d’, time.localtime()) #赋予date变量
password = getpass.getpass(‘Password:’) #赋予password变量

host={
‘192.168.1.10’,
‘192.168.1.11’,
}; #定义需要下发配置的主机 IP

for ip in host: #定义循环
#创建字典
cisco_ios = {
‘device_type’:“cisco_ios”, #定义设备类型
‘ip’:ip, #调用变量ip
‘port’:‘22’, #指定端口,默认为22
‘username’:‘admin’, #设备登录名
‘password’:password, #调用getpass模块
#‘secret’ : ‘admin’ #enable密码
}
try:
cisco_connect = ConnectHandler(**cisco_ios) #传入设备字典与设备建立SSH连接。
print (“Sucessfully Login to”,ip)
print (“Building configuration…”)
config = [‘ntp server 192.168.1.1’,‘ntp server 192.168.1.2’,‘do show run | sec ntp’] #定义需要配置的命令
input = cisco_connect.send_config_set(config) #执行命令
print(input) #打印输出结果
print(ip,‘Was finished!\n’,“-”*100)
except NetmikoAuthenticationException : #认证失败报错记录
e1 = open(f’{date}.txt’,‘a’)
print(date,ip,‘[Error 1] Authentication failed.\n’,file = e1)
e1.close
except NetmikoTimeoutException : #登录超时报错记录
e2 = open(f’{date}.txt’,‘a’)
print(date,ip,‘[Error 2] Connection timed out.\n’,file = e2)
e2.close
except : #未知报错记录
e3 = open(f’{date}.txt’,‘a’)
print(date,ip,‘[Error 3] Unknown error.\n’,file = e3)
e3.close
cisco_connect.disconnect() #断开SSH连接

执行脚本

C:\Users\Administrator> python Cisco_Autoconfig.py
Password: #输入密码
Sucessfully Login to 192.168.1.10
Building configuration…
config term
Enter configuration commands, one per line.
Cisco_C2960_01(config)#ntp server 192.168.1.1
Cisco_C2960_01(config)#ntp server 192.168.1.2
Cisco_C2960_01(config)#do sho run | in ntp
ntp server 192.168.1.1
ntp server 192.168.1.2
Cisco_C2960_01(config)#end
Cisco_C2960_01#
192.168.1.10 Was finished!

Sucessfully Login to 192.168.1.11
Building configuration…
config term
Enter configuration commands, one per line.
Cisco_C2960_02(config)#ntp server 192.168.1.1
Cisco_C2960_02(config)#ntp server 192.168.1.2
Cisco_C2960_02(config)#do sho run | in ntp
ntp server 192.168.1.1
ntp server 192.168.1.2
Cisco_C2960_02(config)#end
Cisco_C2960_02#
192.168.1.11 Was finished!

C:\Users\Administrator>

当主机出现不可达或者密码错误时,在执行过程中会自动创建以日期命名的 txt 文件,记录失败主机 IP 、时间和原因,如下:

C:\Users\Administrator> more 20200709.txt
20200708 192.168.1.11 [Error 1] Authentication failed.
20200708 192.168.1.12 [Error 2] Connection timed out.
20200708 192.168.1.13 [Error 3] Unknown error.

二、华为

编辑文件,文件命名Huawei_Autoconfig.py

#!/usr/bin/python3
#-*- coding:utf-8 -*-

ScriptName: Huawei_Autoconfig.py

Create Date: 2020-07-08 16:35

Modify Date: 2020-07-08 16:35

#***************************************************************#
from netmiko import ConnectHandler,NetmikoTimeoutException,NetmikoAuthenticationException #引入netmiko连接模块、报错模块
import getpass #引入密码模块
import time #引入时间模块
date = time.strftime(‘%Y%m%d’, time.localtime()) #赋予date变量

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数软件测试工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上软件测试开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新*

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-DQgWKA54-1712908361255)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值