netmiko -- 網絡設備運維庫


簡介

https://github.com/ktbyers/netmiko

Multi-vendor library to simplify Paramiko SSH connections to network devices

支持多設備廠商的庫,簡化SSH連接工作。

 

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

The purposes of this library are the following:

  • Successfully establish an SSH connection to the device
  • Simplify the execution of show commands and the retrieval of output data
  • Simplify execution of configuration commands including possibly commit actions
  • Do the above across a broad set of networking vendors and platforms

目的:

成功建立SSH連接

簡化執行的show命令,和獲取結果

簡化執行配置命令,包括可能的commit動作

跨網絡設備廠商和平台

 

API

https://ktbyers.github.io/netmiko/docs/netmiko/index.html#netmiko.ConnectHandler

 

def send_command(self, command_string, expect_string=None, delay_factor=1, max_loops=500, auto_find_prompt=True, strip_prompt=True, strip_command=True, normalize=True, use_textfsm=False, textfsm_template=None, use_genie=False, cmd_verify=True)

Execute command_string on the SSH channel using a pattern-based mechanism. Generally used for show commands. By default this method will keep waiting to receive data until the network device prompt is detected. The current network device prompt will be determined automatically.

 

def send_config_set(self, config_commands=None, exit_config_mode=True, delay_factor=1, max_loops=150, strip_prompt=False, strip_command=False, config_mode_command=None, cmd_verify=True, enter_config_mode=True)

Send configuration commands down the SSH channel.

config_commands is an iterable containing all of the configuration commands. The commands will be executed one after the other.

Automatically exits/enters configuration mode.

 

Demo

https://github.com/ktbyers/netmiko/blob/develop/EXAMPLES.md#connecting-to-multiple-devices

 

show

from netmiko import ConnectHandler
from getpass import getpass

cisco1 = { 
    "device_type": "cisco_ios",
    "host": "cisco1.lasthop.io",
    "username": "pyclass",
    "password": getpass(),
}

# Show command that we execute.
command = "show ip int brief"

with ConnectHandler(**cisco1) as net_connect:
    output = net_connect.send_command(command)

# Automatically cleans-up the output so that only the show output is returned
print()
print(output)
print()

 

https://github.com/ktbyers/netmiko/blob/develop/EXAMPLES.md#configuration-changes

#!/usr/bin/env python
from netmiko import ConnectHandler
from getpass import getpass

device = {
    "device_type": "cisco_ios",
    "host": "cisco1.lasthop.io",
    "username": "pyclass",
    "password": getpass(),
}

commands = ["logging buffered 100000"]
with ConnectHandler(**device) as net_connect:
    output = net_connect.send_config_set(commands)
    output += net_connect.save_config()

print()
print(output)
print()

 

 

Juniper設備的config模式需要特殊處理

https://ultraconfig.com.au/blog/netmiko-automation-on-juniper-routers-full-tutorial-for-beginners/

需要調用commit

調用send_config_set需要添加exit_config_mode參數

# Edit the candidate configuration config_commands = [ 'set interfaces ge-0/0/1 unit 0 family inet address 10.10.10.10/24', 'set interfaces ge-0/0/1 unit 0 description "Test Config"'] output = net_connect.send_config_set(config_commands, exit_config_mode=False) print(output)



# Commit the config changes output = net_connect.commit() print(output)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM