zoukankan      html  css  js  c++  java
  • 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,默认的回车字符, 为' ' reponse_return #str,默认返回的回车字符,为' ' 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
    ")    #连接远程机器,必须得带回车
    time.sleep(3)                                                 #必须得等待几秒,否则读取不到返回
    result = net_connect.read_channel()                    #读取返回结果
    if 'assword' in result:
        net_connect.write_channel("password
    ")     #输入密码
        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) -- 发送一组从本地写好的文件中的配置命令

  • 相关阅读:
    技本功丨收藏!斜杠青年与你共探微信小程序云开发(下篇)
    技本功丨收藏!斜杠青年与你共探微信小程序云开发(中篇)
    2-4-2-6HTML文件标签
    2-4-1-4——2-4-1-5HTML快速入门
    2-4-1-1——2-4-1-3HTML介绍
    redis
    2-1-2-06 获取class对象的三种方式
    2-1-2-05反射概述
    Java面试题
    servlet和http请求协议
  • 原文地址:https://www.cnblogs.com/zz27zz/p/9590008.html
Copyright © 2011-2022 走看看