不要跟我讲什么VXLAN、SDN,

老夫搞了十几年网络就是‘一把梭’,配VLAN、默认路由,Permit any any,插上console就是干,通了就走!

Python模块-Netmiko入门

支持平台

Netmiko支持各种设备。这些设备分为三类:

  • 定期测试
  • 有限测试
  • 实验性

定期测试意味着我们尝试在每个Netmiko版本之前针对该套设备运行完整的测试套件。

有限测试意味着在某个时间点针对该平台上的测试通过的配置和显示操作系统测试,因此,我们可以合理地认为驱动程序通常应该可以工作。

实验意味着我们检查了PR,并且驱动程序似乎是合理的,但是关于驱动程序是否完全通过单元测试或其可靠性如何,我们没有足够的数据。

支持平台如下:

定期测试
  • 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

安装

要安装netmiko,只需使用我们的pip:

$ pip install netmiko

Netmiko具有以下要求

  • Paramiko >= 2.4.3
  • scp >= 0.13.2
  • pyserial
  • textfsm

创建代表设备的字典

支持的device_types可以在ssh_dispatcher.py中找到,请参阅CLASS_MAPPER键。

from netmiko import ConnectHandler

cisco_881 = {
    'device_type': 'cisco_ios',
    'host':   '10.10.10.10',
    'username': 'test',
    'password': 'password',
    'port' : 8022,          # optional, defaults to 22
    'secret': 'secret',     # optional, defaults to ''
}

通过传入设备字典与设备建立SSH连接。

net_connect = ConnectHandler(**cisco_881)

执行show命令。

output = net_connect.send_command('show ip int brief')
print(output)
Interface                  IP-Address      OK? Method Status                Protocol
FastEthernet0              unassigned      YES unset  down                  down
FastEthernet1              unassigned      YES unset  down                  down
FastEthernet2              unassigned      YES unset  down                  down
FastEthernet3              unassigned      YES unset  down                  down
FastEthernet4              10.10.10.10     YES manual up                    up
Vlan1                      unassigned      YES unset  down                  down

执行配置更改命令(将自动进入配置模式)

config_commands = [ 'logging buffered 20000',
                    'logging buffered 20010',
                    'no logging console' ]
output = net_connect.send_config_set(config_commands)
print(output)
pynet-rtr1#config term
Enter configuration commands, one per line.  End with CNTL/Z.
pynet-rtr1(config)#logging buffered 20000
pynet-rtr1(config)#logging buffered 20010
pynet-rtr1(config)#no logging console
pynet-rtr1(config)#end
pynet-rtr1#

Netmiko常用方法:

  • net_connect.send_command()-在通道上发送命令,返回输出(基于模式)
  • net_connect.send_command_timing()-在通道上发送命令,返回输出(基于定时)
  • net_connect.send_config_set()-将配置命令发送到远程设备
  • net_connect.send_config_from_file()-发送从文件加载的配置命令
  • net_connect.save_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()-通道的低级写入
点赞