什么是 Netmiko
是一个基于 paramiko
二次封装的,可以通过 SSH 连接多种网络设备的库,从 3.0 版本以来,加入了对国内厂商的支持,是非常不错的网络自动化工具。
目前支持设备几乎覆盖了市面上大部分设备,包括锐捷、华三、华为、思科、f5 等等,具体的列表见后文。
如何使用
安装
首先需要具备Python3.6
以上版本的环境,使用pip
可以直接安装。
国内下载速度很慢,可以参考Python 下载加速:pip pypi 使用国内源及永久配置 pip 源进行配置。
出现 Successfully installed netmiko
即为安装成功。
使用
实验环境:Windows 10, Python 3.8 ,HCL 2.1.2
基本使用方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| from netmiko import ConnectHandler as ch
host = { 'device_type': 'hp_comware', 'host': '192.168.56.20', 'username': 'netdevops', 'password': 'netdevops', 'port': 22, 'secret': '', }
conn = ch(**host)
output = conn.send_command('display ip int brief') print(output)
|
以下为输出信息,可以看到已经从设备上采集到了需要的信息
执行多条命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| from netmiko import ConnectHandler as ch
host = { 'device_type': 'hp_comware', 'host': '192.168.56.20', 'username': 'netdevops', 'password': 'netdevops', 'port': 22, 'secret': '', }
conn = ch(**host)
commands = ['int g0/1', 'ip add 1.1.1.1 30', 'desc netmiko_config']
output = conn.send_config_set(commands) print(output)
|
以下为执行后的结果
设备上已经配置完成。
登录设备后发生了什么?
Netmiko 可以通过 SSH 配置网络设备,那么它登录到设备之后,做了什么动作呢?
我们可以从网络设备的 LOG 中看到相关信息,以下为本次实验中的一些 LOG:
def send_command():
从 LOG 的第二部分可以看到,当执行 send_command
方法时,netmiko 先输入了取消分屏的命令 screen-length disable
,在进行了对应的命令,这样在有大量输出时,可以保证输出内容是完整的。
其实不仅是华三设备,Netmiko 对其他设备如思科、华为等都做了适配,登录设备之后,都会先执行对应的取消分屏的命令。
所以,这里可以总结一个注意点,即:
设备登录使用的用户名需要有执行取消分屏命令的权限(比如 level 0 用户可能无该命令,则无法收集信息)。
def send_config_set():
从 LOG 的第一部分可以看到,当执行send_config_set
方法时,Netmiko 不但输入了取消分屏的命令,还执行了system-view
进入了系统视图下,之后才执行了我们输入的命令。
从这个方法的名字 send_config_set
可以看出,Netmiko 认为此时输入的是一系列配置命令,所以直接帮我们进入了系统视图下。
对比其他设备如 Cisco,Netmiko 则会帮我们执行 config terminal
进入配置模式,此时,对于思科设备的 show 命令,则不能批量执行(思科在配置模式下得用 do show 才可以)。
当命令执行完成,Netmiko 帮我们退出了系统视图,之后中断了 SSH 连接。
这里第二个注意点:
使用 send_config_set
方法时,需要用户具有配置权限。这个方法通常用来配置刷入。
支持的设备列表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
| a10 accedian alcatel_aos alcatel_sros apresia_aeos arista_eos aruba_os avaya_ers avaya_vsp brocade_fastiron brocade_netiron brocade_nos brocade_vdx brocade_vyos calix_b6 checkpoint_gaia ciena_saos cisco_asa cisco_ios cisco_nxos cisco_s300 cisco_tp cisco_wlc cisco_xe cisco_xr cloudgenix_ion coriant dell_dnos9 dell_force10 dell_isilon dell_os10 dell_os6 dell_os9 dell_powerconnect dlink_ds eltex eltex_esr endace enterasys extreme extreme_ers extreme_exos extreme_netiron extreme_nos extreme_slx extreme_vdx extreme_vsp extreme_wing f5_linux f5_ltm f5_tmsh flexvnf fortinet generic_termserver hp_comware hp_procurve huawei huawei_olt huawei_smartax huawei_vrpv8 ipinfusion_ocnos juniper juniper_junos juniper_screenos keymile keymile_nos linux mellanox mellanox_mlnxos mikrotik_routeros mikrotik_switchos mrv_lx mrv_optiswitch netapp_cdot netscaler nokia_sros oneaccess_oneos ovs_linux paloalto_panos pluribus quanta_mesh rad_etx ruckus_fastiron ruijie_os sophos_sfos ubiquiti_edge ubiquiti_edgeswitch ubiquiti_unifiswitch vyatta_vyos vyos watchguard_fireware
|