netmiko


安裝 pip install netmiko

關聯包:scp,pyyam1,pyserial,textfsm,enum34,ipaddress,cryptography,pyasn1,six,cffi,asn1crypto,idna,pycparser

優勢:

支持telnet和ssh連接

連接設備方便

簡化執行命令和取回輸出數據

簡化配置命令和提交動作

能在各個平台上執行以上動作

支持的平台:

   普通設備類型,例如 cisco_ios、hp_procurve

傳送文件的設備類型,例如 cisco_ios、juniper_junos
telent的設備類型,例如 cisco_ios_telnet,hp_procurve_telnet

Serial型號,例如 cisco_ios_serial'
jumper類型:terminal_server

1.1 BaseConnection

class netmiko.base_connection.BaseConnection()
__init__(ip='', host='', username='', password='', secret='', port=None, device_type='', verbose=False, global_delay_factor=1, use_keys=False, key_file=None, allow_agent=False, ssh_strict=False, system_host_keys=False, alt_host_keys=False, alt_key_file='', ssh_config_file=None, timeout=100,session_timeout=60, blocking_timeout=8, keepalive=0, default_enter=None,response_return=None, serial_settings=None, fast_cli=False, session_log=None, session_log_record_writes=False, session_log_file_mode='write')
__enter__() #建立session
__exit__(exe_type,exc_value,traceback)   #關閉連接

ip #str,目標設備的ip地址,如果host參數有值,此項可為空 host #str,目標設備名稱,如果ip參數有值,此項可為空 username #str,目標設備的登錄用戶名 pasword #str,目標設備的登錄密碼 secret #str,目標設備enable 密碼 port #int/None,目標設備的連接端口,會根據device type類型來自動判斷port是哪個,所以此項可以不填 device_type #str,目標設備的設備類型 verbose #bool,允許在標准輸出中添加附加信息 global_delay_factor#int,默認為1,各種因素造成的netmiko延時 use_keys#bool,用ssh keys連接目標設備 key_file#str,ssh key的文件路徑 allow_agent#bool,允許用ssh key-agent ssh_strict#bool,默認False,自動拒絕不知道的ssh host keys system_host_keys#bool,導入host keys從用戶已知的hosts文件中 alt_host_keys#bool,如果是True,host keys被導入從alt_key_file alt_key_file#str,ssh host key文件,(如果alt_host_keys=True) ssh_config_file#str,OpenSSH配置文件名稱 timeout #float,連接超時時間,默認為100 session_timeout #float,每個請求的超時時間,默認為60
bocking_timeout #int, 默認為8,是給ssh連接中的paramiko中的session超時方法設置的時間
keepalive #int,默認為0,保持連接活躍,是給ssh連接中paramiko中的keepalive方法設置的時間 default_enter #str,默認的回車字符, 為'\n' reponse_return #str,默認返回的回車字符,為'\n' fast_cli #boolean,默認False。當為真時,返回delay_factor和global_delay_factor比較小的那個值,為false時返回比較大的那個值
session_log #str,session log文件路徑,默認None session_log_record_writes #boolean,默認False session_log_file_mode #str,默認write,當session_log寫好文件路徑后,在這個參數中,寫模式是‘w’,追加模式是‘append’

 

 

 

 

from netmiko import ConnectHandler
cisco_881 = {
    "device_type": "cisco_ios",    #device_type 必須得是包支持的類型
    "ip":"10.10.10.227",          #ip和host二者寫其一即可
    "host":"",
    "username":"pyclass",
    "password":"password",
   "port" : 23,               #默認22
    "secret": "secret",       #默認 ''  此項為enable password
    "verbose": False,         #默認False,是否允許附加信息在標准的輸出中
    "global_delay_factor": 1,   #並非是超時設置,而是控制各種操作的延時,大多數情況下不需要設置此項,除非是一些設備運行緩慢,尤其是虛擬設備,會導致程序緩慢,也可以給專門的命令增加延時時間,默認0.5秒,
    "use_key" : False,
    "key_file": None,
    "allow_agent" : False,
    "ssh_strict": False,
    "system_host_keys": False,
    "alt_host_keys" : False,
    "alt_key_file": "",
    "ssh_config_file": None,
    "timeout" : 8,             #連接超時時間,默認為8秒
    "session_timeout": 60,
    "blocking_timeout":8,
    "keepalive":0,
    "default_enter":None,
    "response_return":None,
    "serial_settings": None,
    "fast_cli":False,
    "session_log":None,
    "session_log_record_writes":False,
    "session_log_file_mode":'wirte'
}

 

 

#連接
net_connect = ConnectHandler(**cisco_881)
#或者
net_connect = ConnectHandler(device_type='cisco_ios', ip='10.10.10.227', username='pyclass', password='password') 

找出設備的prompt

prompt = net_connect.find_prompt()
print prompt
#輸出 'pynet-rtr1#'

輸出命令

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.220.88.20    YES NVRAM  up                    up      
Vlan1                      unassigned      YES unset  down                  down  
net_connect.send_command('clear configuration commits diskspace 2000', delay_factor=2)    #給這條命令增加延時時間,2倍

查看設備配置

output = net_connect.send_command("show run | inc logging")     #看下當前的日志配置 print output
# 輸出
logging buffered 8880
no logging console 

改變設備配置

config_commands = ['logging buffered 19999']   #創建一個想要執行的配置命令列表
output = net_connect.send_config_set(config_commands)     #執行配置命令列表
print output
#輸出結果
config term
Enter configuration commands, one per line.  End with CNTL/Z.
pynet-rtr1(config)#logging buffered 19999
pynet-rtr1(config)#end
pynet-rtr1#  
#查看設備配置是否改變
output = net_connect.send_command("show run | inc logging")
print output
#輸出
logging buffered 19999
no logging console   

 如果有跳板機的情況下

windows(script server)---Linux(jumper server)---Router

from netmiko import ConnectHandler
import time
from netmiko import redispatch

jumpserver = {
'device_type':'termimal_server',      #腳本在windows上跳板機的類型一般都是termila_server
'ip': '192.168.5.2',
'username':'xxx',
'password':'xxxx',
}

net_connect = ConnectHandler(**jumpserver)
print net_connect.find_prompt()
net_connect.write_channel("ssh xx@10.30.1.11\n")    #連接遠程機器,必須得帶回車
time.sleep(3)                                                 #必須得等待幾秒,否則讀取不到返回
result = net_connect.read_channel()                    #讀取返回結果
if 'assword' in result:
    net_connect.write_channel("password\n")     #輸入密碼
    time.sleep(5)
redispatch(net_connect, device_type='cisco_ios')    #
net_connect.send_command('show version')
net_connect.disconnect()

 

send_command(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)

expect_string  #如果沒有值會把prompt作為expect string
normalize  #如果為True,則會把command_string給出的字符串去掉左空格在加上回車鍵
use_textfsm  #如果為True

 

net_connect.config_mode() -- 進入配置模式

net_connect.check_config_mode() -- 檢查是否在配置模式中,返回布爾值

net_connect.exit_config_mode() -- 退出配置模式

net_connect.clear_buffer() -- 清除在遠程設備上輸出的緩存

net_connect.enable() -- 進入enable模式

net_connect.exit_enable_mode() -- 退出enable模式

net_connect.find_prompt() -- 返回當前設備的prompt

net_connect.commit(arguments) -- 執行一個提交動作在juniper和IOS-XR上

net_connect.disconnect() -- 關於ssh連接

net_connect.send_command(arguments) -- 發送命令,返回輸出結果,默認超時時間為self.timeout的設置時間,默認為8秒

net_connect.send_command_expect(arguments)   #默認超時時間100秒

net_connect.send_command_timing(arguments)

net_connect.send_config_set(arguments) -- 發送一組配置命令給遠程設備

net_connect.send_config_from_file(arguments) -- 發送一組從本地寫好的文件中的配置命令

 


免責聲明!

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



猜您在找 netmiko初窺
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM