Python自动化运维—netmiko模块连接并配置华为交换机

生命价值不在于获取多少,生命价值在于付出多少。有钱的人更有钱,这往往是一种必然。

netmiko是Paramiko的增强版本,专门面向网络设备。虽然paramiko能够处理与设备的SSH连接,并判断设备类型是服务器、打印机还是网络设备,但netmiko在设计时针对网络设备做了优化,能够有效第处理SSH连接。netmiko还支持各种不同的设备厂商和平台。

netmiko也是对paramiko的封装,它使许多其他增强功能扩展了paramiko,比如使用启用的密码直接访问所支持的设备,从文件读取配置并将推送到设备,在登录期间禁用分页显示,以及默认在每条命令后面加上回车符“\n”等。

1、支持的设备商

netmiko支持许多供应商的设备,并定期在支持列表中添加新的供应商。netmiko支持的供应商列表分为定期测试类、有限测试类和实验类。在该模块的GitHub页面上可以找到这个列表。

2、安装和验证

安装netmiko非常简单。打开Windows命令行窗口或Linux shell,执行下面的命令就可以从PyPI获取最新版本的netmiko包。

pip install netmiko
Microsoft Windows [版本 10.0.18363.1082]
(c) 2019 Microsoft Corporation。保留所有权利。

(venv) D:\pycharm\demo>pip install netmiko
Collecting netmiko
  Downloading netmiko-3.3.0-py2.py3-none-any.whl (160 kB)
     |████████████████████████████████| 160 kB 17 kB/s
Collecting textfsm
  Downloading textfsm-1.1.0-py2.py3-none-any.whl (37 kB)
Requirement already satisfied: setuptools>=38.4.0 in d:\pycharm\demo\venv\lib\site-packages (from netmiko) (47.1.0)
Requirement already satisfied: paramiko>=2.4.3 in d:\pycharm\demo\venv\lib\site-packages (from netmiko) (2.7.2)
Collecting pyserial
  Downloading pyserial-3.4-py2.py3-none-any.whl (193 kB)
     |████████████████████████████████| 193 kB 16 kB/s
Collecting scp>=0.13.2
  Downloading scp-0.13.2-py2.py3-none-any.whl (9.5 kB)
Requirement already satisfied: six in d:\pycharm\demo\venv\lib\site-packages (from textfsm->netmiko) (1.15.0)
Collecting future
  Downloading future-0.18.2.tar.gz (829 kB)
     |████████████████████████████████| 829 kB 13 kB/s
Requirement already satisfied: bcrypt>=3.1.3 in d:\pycharm\demo\venv\lib\site-packages (from paramiko>=2.4.3->netmiko) (3.2.0)
Requirement already satisfied: cryptography>=2.5 in d:\pycharm\demo\venv\lib\site-packages (from paramiko>=2.4.3->netmiko) (3.1)
Requirement already satisfied: pynacl>=1.0.1 in d:\pycharm\demo\venv\lib\site-packages (from paramiko>=2.4.3->netmiko) (1.4.0)
Requirement already satisfied: cffi>=1.1 in d:\pycharm\demo\venv\lib\site-packages (from bcrypt>=3.1.3->paramiko>=2.4.3->netmiko) (1.14.3)
Requirement already satisfied: pycparser in d:\pycharm\demo\venv\lib\site-packages (from cffi>=1.1->bcrypt>=3.1.3->paramiko>=2.4.3->netmiko) (2.20)
Using legacy setup.py install for future, since package 'wheel' is not installed.
Installing collected packages: future, textfsm, pyserial, scp, netmiko
    Running setup.py install for future ... done
Successfully installed future-0.18.2 netmiko-3.3.0 pyserial-3.4 scp-0.13.2 textfsm-1.1.0
WARNING: You are using pip version 20.1.1; however, version 20.2.3 is available.
You should consider upgrading via the 'd:\pycharm\demo\venv\scripts\python.exe -m pip install --upgrade pip' command.

然后,在Python文件引入netmiko,验证模块是否正确地安装到Python site-packages中。

import netmiko

3、使用netmiko建立SSH连接

现在该使用netmiko了,让我们来看看他强大的SSH功能。首先连接到网络设备,并在上面执行命令。默认情况下,netmiko建立回话(session)的过程中会在后台处理许多操作(如添加位置的SSH主机秘钥,设置终端类型、宽度和高度),在需要的时候还可以进入特权(enable)模式,然后通过供应商提供的命令来禁用分页。

首先,以字典格式定义设备并提供下列5个必须的关键信息。

import netmiko

huawei_connect= {
    'device_type':'huawei',     #支持huawei_olt,huawei_vrpv8,如输入错误,控制台将会打印出支持的设备和平台列表    
    'ip':'192.168.100.2',
    'username':'huajiao238',
    'password':'ytymz.com',
}

第一个参数是‘device_type’,为了执行正确的命令,需要使用这个参数来定义平台供应商。然后需要SSH的IP地址。如果已经使用DNS解析了IP地址,该参数可以是主机名,否则该参数是IP地址。接下来提供username、password注意,可以使用getpass()模块隐藏密码,并且只在脚本运行期间提示它们。

接下来,从netmiko模块中导入ConnectHandler函数,并提供定义好的字典来开始建立连接。如果连接的是思科设备且已开启特权密码,则需要为创建的连接提供.enable(),以在特权模式下访问。使用.send_command()在交换机终端上执行命令,.send_command()将会执行命令并通过变量的值显示设备的输出。

import netmiko
from netmiko import ConnectHandler
huawei_connect = {
    'device_type' : 'huawei',
    'ip':'192.168.100.2',
    'username':'huajiao238',
    'password':'ytymz.com',
}

connection = ConnectHandler(**huawei_connect)
output = connection.send_command('display ip interface brief')
print(output)

输出结果如下:

D:\pycharm\demo\venv\Scripts\python.exe D:/pycharm/demo/netmi.py
*down: administratively down
^down: standby
(l): loopback
(s): spoofing
The number of interface that is UP in Physical is 2
The number of interface that is DOWN in Physical is 1
The number of interface that is UP in Protocol is 2
The number of interface that is DOWN in Protocol is 1

Interface                         IP Address/Mask      Physical   Protocol  
MEth0/0/1                         unassigned           down       down      
NULL0                             unassigned           up         up(s)     
Vlanif1                           192.168.100.2/24     up         up 

注意,这里看到的输出结果去掉了命令中的命令回显和设备提示符。默认情况下,netmiko会替换设备的返回结果,是输出更加整洁,替换过程通过正则表达式完成。

如果不想使用这种方式,而是希望看到命令提示符,并在返回结果的后面执行命令,可以在.send_command()函数中加上以下参数:

output = connection.send_command('display ip interface brief',strip_command=False,strip_prompt=False)

strip_commmand=False和strip_prompt=False告诉netmiko保留而不是替换命令行回显和提示符。默认情况下它为true,可以根据需要进行设置。

D:\pycharm\demo\venv\Scripts\python.exe D:/pycharm/demo/netmi.py
display ip interface brief
*down: administratively down
^down: standby
(l): loopback
(s): spoofing
The number of interface that is UP in Physical is 2
The number of interface that is DOWN in Physical is 1
The number of interface that is UP in Protocol is 2
The number of interface that is DOWN in Protocol is 1

Interface                         IP Address/Mask      Physical   Protocol  
MEth0/0/1                         unassigned           down       down      
NULL0                             unassigned           up         up(s)     
Vlanif1                           192.168.100.2/24     up         up        
<huajiao>

4、使用netmiko配置华为交换机

netmiko可以通过SSH配置远程设备,通过.config方法进入设备的配置模式,然后按照列表格式中的信息(配置列表)配置设备。配置列表可以直接写在Python脚本中,也可以从文件读取,然后用readlines()方法转换为列表。本例以新建vlan10并给valnif10配置IP地址为例:

import netmiko
from netmiko import ConnectHandler
huawei_connect = {
    'device_type' : 'huawei',
    'ip':'192.168.100.2',
    'username':'huajiao238',
    'password':'ytymz.com',
}

vlanif10 = [
    'sys',
    'vlan 10',
    'int vlan 10',
    'ip address 192.168.200.1 30',
]
connection = ConnectHandler(**huawei_connect);
connection.send_config_set(vlanif10)
output = connection.send_command('dis cu int vlan 10',strip_command=False,strip_prompt=False)
print(output)

结果输出:

D:\pycharm\demo\venv\Scripts\python.exe D:/pycharm/demo/netmi.py
dis cu int vlan 10
#
interface Vlanif10
 ip address 192.168.200.1 255.255.255.252
#
return
<huajiao>

创作不易,且读且点赞

以上就是Python自动化运维—netmiko模块连接并配置华为交换机。只有正直、忠诚、宽容和拥有仁爱之心的人才能够达到真正意义上的成功。不具备这些品质的人,就无法体会到成功的滋味,因为成功和幸福一样,不在于外在的富有,而在于内心的感受。更多关于Python自动化运维—netmiko模块连接并配置华为交换机请关注haodaima.com其它相关文章!

标签: Python netmiko