python netmiko模块连接华为交换机并执行相应命令

from netmiko import ConnectHandler,NetmikoTimeoutException,NetmikoAuthenticationException
import logging
import getpass
import time
#class Login:

#     password = getpass.getpass('Password:')

host={
'172.20.20.67',
'172.20.20.66',
};
commands = input('请输入命令:')
for huawei in host:
    {
    'device_type': "huawei",
    'ip': huawei,
    'port': '22',
    'username': 'ttsx',
    'password': 'password',
    }
    logging.basicConfig(filename="test.log", level=logging.DEBUG)
    huawei = {'device_type': 'huawei', 'ip': huawei,'username': 'ttsx', 'password': 'password','port': 22}

    net_connect = ConnectHandler(**huawei)
    sshConfirm = net_connect.find_prompt()
    print('login ' + sshConfirm)


    output = net_connect.send_config_set(commands)

    print(output)

登录设备后发生了什么?

netmiko 可以通过 ssh 配置网络设备,那么它登录到设备之后,做了什么动作呢?
我们可以从网络设备的 LOG 中看到相关信息,以下为本次实验中的一些 LOG:
在这里插入图片描述

send_command
从 LOG 的第二部分可以看到,当执行 send_command 方法时,netmiko 先输入了取消分屏的命令 screen-length disable ,在进行了对应的命令,这样在有大量输出时,可以保证输出内容是完整的。

其实不仅是华三设备,netmiko 对其他设备如思科、华为等都做了适配,登录设备之后,都会先执行对应的取消分屏的命令。

所以,这里可以总结一个注意点,即:
设备登录使用的用户名需要有执行取消分屏命令的权限(比如 level 0 用户可能无该命令,则无法收集信息)。

send_config_set
从 LOG 的第一部分可以看到,当执行send_config_set 方法时,netmiko 不但输入了取消分屏的命令,还执行了system-view进入了系统视图下,之后才执行了我们输入的命令。

从这个方法的名字 send_config_set 可以看出,netmiko 认为此时输入的是一系列配置命令,所以直接帮我们进入了系统视图下。

对比其他设备 cisco,netmiko 则会帮我们执行 config terminal进入配置模式,读者可以自行进行验证。

当命令执行完成,netmiko 帮我们退出了系统视图,之后中断了 SSH 连接。

这里第二个注意点:
使用 send_config_set 方法时,需要用户具有配置权限。

常用方法

  • net_connect.send_command() # 向下发送命令,返回输出(基于模式)

  • net_connect.send_command_timing() # 沿通道发送命令,返回输出(基于时序)

  • net_connect.send_config_set() # 将配置命令发送到远程设备,此模式默认进到交换机里为全局配置模式,非用户模式,如果要执行用户模式下的某些命令,需要使用上一条方法。

  • net_connect.send_config_from_file() # 发送从文件加载的配置命令

  • net_connect.save_config() # 将running#config保存到startup#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() # 通道的低级写入

根据方法,选择相应命令,否则无法得到想要的结果

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值