如何用python自动导出系统数据 (python自动化预置数据)

以下文章来源于网络技术杂谈 ,作者 SYANG

python自动备份网络设备配置文件,python巡检网络设备并写入word

批量备份网络设备配置

先前我们介绍了如何用Ansible网络模块备份思科交换机配置(如果不清楚的同学可以关注下本号,查看历史文章。),此文我们将介绍如何用Python Netmiko模块批量备份网络设备配置。

环境准备(本文采用 Windows 系统)

系统

Python

模块

Win/MAC/Lix

3.0+

netmiko

Python3 安装

打开 Python *载下**链接:

https://www.python.org/downloads/release/python-373/

选择对应版本的安装包,点击*载下**

python自动备份网络设备配置文件,python巡检网络设备并写入word

*载下**完成后,打开 Python 安装包

安装步骤如下:

一、如图勾选下方的两个选项框,点击 Customize installation 进入下一步安装步骤:

python自动备份网络设备配置文件,python巡检网络设备并写入word

二、所有选项保持默认,点击 Next 进入下一步安装步骤:

python自动备份网络设备配置文件,python巡检网络设备并写入word

三、如图勾选 Install for users 选项,点击 Install 开始安装:

python自动备份网络设备配置文件,python巡检网络设备并写入word

四、等待安装程序完成

python自动备份网络设备配置文件,python巡检网络设备并写入word

五、验证安装结果(以管理员身份运行 CMD)

C:\Users\Administrator> python -V

Python 3.7.3 #控制台输出表示安装成功

六、安装 netmiko 模块(系统自带getpass 模块)

安装 netmiko

C:\Users\Administrator> pip install netmiko

Collecting 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

Python3 安装

打开 Python *载下**链接:

https://www.python.org/downloads/release/python-373/

选择对应版本的安装包,点击*载下**

python自动备份网络设备配置文件,python巡检网络设备并写入word

*载下**完成后,打开 Python 安装包

安装步骤如下:

一、如图勾选下方的两个选项框,点击 Customize installation 进入下一步安装步骤:

python自动备份网络设备配置文件,python巡检网络设备并写入word

二、所有选项保持默认,点击 Next 进入下一步安装步骤:

python自动备份网络设备配置文件,python巡检网络设备并写入word

三、如图勾选 Install for users 选项,点击 Install 开始安装:

python自动备份网络设备配置文件,python巡检网络设备并写入word

四、等待安装程序完成

python自动备份网络设备配置文件,python巡检网络设备并写入word

五、验证安装结果(以管理员身份运行 CMD)

C:\Users\Administrator> python -V

Python 3.7.3 #控制台输出表示安装成功

六、安装 netmiko 模块(系统自带getpass 模块)

安装 netmiko

C:\Users\Administrator> pip install netmiko

Collecting 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 脚本

一、SSH登录脚本

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

#!/usr/bin/python3

#-*- coding:utf-8 -*-

# ScriptName: network_ssh.py

# Create Date: 2020-07-26 12:39

# Modify Date: 2019-07-26 12:39

#***************************************************************#

from netmiko import ConnectHandler

def huawei(ip,username,password,secret): //华为

huawei = {

'device_type': 'huawei',

'ip': ip,

'username': username,

'password': password,

'secret':secret,

}

command = ['dis cu']

connect = ConnectHandler(**huawei)

connect.enable()

full_config = ''

for cmd in command:

config = connect.send_command(cmd)

full_config = full_config + config

return full_config

connect.disconnect()

def cisco_ios(ip,username,password,secret): //思科

cisco = {

'device_type': 'cisco_ios',

'ip': ip,

'username': username,

'password': password,

'secret':secret,

}

command = ['show run']

connect = ConnectHandler(**cisco)

connect.enable()

full_config = ''

for cmd in command:

config = connect.send_command(cmd)

full_config = full_config + config

return full_config

connect.disconnect()

if __name__ == '__main__':

host = ['1.1.1.1']

for ip in host:

huawei(ip,'你的账号','你的密码','enable密码')

这个脚本也可单独使用作为批量下发网络设备配置噢!

这里的IP,用户名、密码单独使用才生效,备份配置使用的IP、用户名、密码以network_config.bak.py里的为主。

二、文件保存脚本

编辑文件,命名network_config_bak.py

#!/usr/bin/python3

#-*- coding:utf-8 -*-

# ScriptName: network_config_bak.py

# Create Date: 2020-07-26 12:47

# Modify Date: 2019-07-26 12:47

#***************************************************************#

from network_ssh import huawei,cisco_ios //调用network_ssh.py中的huwei cisco_ios

import os

import sys

import time

import threading

date = time.strftime('%Y%m%d', time.localtime())

huawei = ['1.1.1.1','2.2.2.2']

cisco_ios = ['3.3.3.3','4.4.4.4']

def huawei_config():

os.system('mkdir /Users/Desktop/config_bak-%s' % date)

for ip in huawei:

try:

bak_config_file = open("/Users/Desktop/config_bak-%s/config_bak_%s-%s.txt" % (date,ip,date),'w')

run_config = huawei(ip,username='账号',password='密码'.secret='enable密码')//使用调用的内容

bak_config_file.write(run_config)

except Exception as e:

print('%s\tError\n%s'%(ip,e))

def cisco_config():

os.system('mkdir /Users/Desktop/config_bak-%s' % date)

for ip in cisco_ios:

try:

bak_config_file = open("/Users/Desktop/config_bak-%s/config_bak_%s-%s.txt" % (date,ip,date),'w')

run_config = cisco_ios(ip,username='账号',password='密码'.secret='enable密码')

bak_config_file.write(run_config)

except Exception as e:

print('%s\tError\n%s'%(ip,e))

if __name__ == '__main__':

x = time.strftime('%H:%M:%S',time.localtime())

print(x)

huawei_config()

cisco_config()

print('End')

x = time.strftime('%H:%M:%S',time.localtime())

print(x)

如果是Linux系统运行,更改如下:

os.mkdir('/root/config_bak-%s' % date)

bak_config_file = open("/root/config_bak-%s/config_bak_%s-%s.txt" % (date,ip,date),'w')

三、运行脚本

python3 network_config.bak.py //记得运行的是这个脚本

Done!

注:本文仅是开源技术分享,没有任何商业目的,如有版权问题请联系小编删除处理,我们并表示歉意

END

看完本文有收获,请分享给更多的人

关注 释然IT杂谈 加星标,提升IT技能