python的netmiko模块自动化管理网络之ssh远程连接所以交换机,执行查询命令,并把查询信息分别保存为一个文件,文件名以交换机的名字命名

功能:使用netmiko模块,ssh远程连接整个网络的所以交换机,所有交换机ssh账户和密码一致,ssh登录交换机后执行dis cu 命令,查询所以配置并把查询的信息保存为以当前交换机名字命名的文件,有多少个交换机就保存出来多少个文件,这样可以简化很多操作,避免让我一台台交换机登录去执行命令并保存。注意如果是执行操作命令,例如开端口,还需要多一步保存的操作,我这不需要就没有保存

代码如下:

在这里插入代码片
#使用netmiko模块批量远程登录华为交换机,先ssh登录,登录失败telnet登录,然后批量执行命令
from netmiko import ConnectHandler  #使用模块里的连接功能
username=input("输入账号:").strip() #strip()函数自动删除你输入的多余的空格
password=input("输入密码:").strip()

with open("需要测试ip列表.txt") as f: #打开ip列表文件,查看你所要测试的所有ip
    ip_list=f.read().splitlines()
    print(ip_list)
   

commonds=['dis ip int br','dis current','dis vlan']
#把你要进去交换机所有执行的命令存放成一个列表,然后赋值一个一个变量commonds列表

for ip in ip_list:   #循环,当远程连接的IP属于你的IP列表里,就要执行下面命令,如果不是文件里的就不用执行,这样可以遍历所以你需要的交换机
  try:    #try命令尝试执行下面命令,失败就执行except下命令
     #定义一个字典device,里面有交换机设备的类型,IP,用户名,密码,端口,记住里面的值都得是str类型
      device={
        'device_type':'huawei',  #类型,有思科,华为....
         'ip':ip,                 #后面IP是个变量,前文有赋值这个变量
         'username':username,
        'password':password,
        'port':'22',
    }
      with ConnectHandler(**device) as net_conncet:  #使用with 执行这个连接功能,使用变量device,并将最后的值赋值给变量net_conncet
        print(device['ip']+"这个交换机已经SSH远程登录成功"+",对应端口为:"+device['port'])
        # 针对上文赋值的变量net_conncet,对它执行交换机内部你需要的操作,net_connect.send_config_set()  将配置命令发送到远程设备 #有很多命令,不同的执行命令有不同操作
       #send_command是只能操作把一条命令输入到交换机内,split()分离查询的结果,得到2个部分,后半部分 split()[1]即为主机名
        hostname = net_conncet.send_command("dis current-configuration | include sysname").split()[1]
        output=net_conncet.send_config_set(commonds) #将所有配置命令commonds发送到远程设备
        net_conncet.disconnect()#关闭链接
        print(output)
        filename=f"{hostname}.txt" #创建一个文件,命名以前文查询到的每个交换机的名字命名
        with open(filename,"a") as f:   #“a”表示以追加的方式打开文件,并把output的值写入这个文件,注意这里最好用a,   #         不能用平常的w模式,w模式保存的文件会覆盖前文
           f.write(output)


  except:
      device = {
        'device': 'huawei_telnet',
        'ip': ip,
        'username': username,
        'password': password,
        'port': 23,
    }
      with ConnectHandler(**device) as con:
        print(device['ip'] + "这个交换机无法SSH远程登录,只能telnet登录" + ",对应端口为:" + device['port'])
        output = con.send_config_set(commonds)
        print(output)
        con.disconnect()


在这里插入图片描述

python里最后执行的效果就是这样,我这里就实验了2个交换机,打开其中一个文件内容大概如下,这样就成功了,是不是少了很多工作,我之前不知道都是一个个交换机去登录,查询然后保存很费时间,这样只用一个代码就简单了。又会了一点简单的操作,给大家分享一下

在这里插入图片描述

  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值