0
点赞
收藏
分享

微信扫一扫

网络工程师的Python之路-paramiko实验4,分组操作,ENSP

实验背景

前面的几个实验是基于一批设备的类型、型号、版本等都一致的情况下进行的。咱们实际现网运维中,数通设备产品线广阔,同样的产品还有众多型号,即便同型号的设备还有不同的软件版本。这些差异造成相应的指令集可能有微小差别,甚至天差地别。本实验通过设备分组模拟现网批次设备间的差异,配合 sys.argv ,让不同组调用不同的预设脚本。

实验拓扑

【SSH 客户端】Win10 虚拟网卡,IP 为 192.168.11.2/24,桥接到云彩,Python所在。

【透明交换机】SW1(启动即可,无需配置,给云彩扩展端口使用)。

【SSH 操作对象】L3Sx,IP为 192.168.11.1x/24,IP 末位奇数分为组1,IP末位偶数为组2,模拟不同型号或版本的交换机。

网络工程师的Python之路-paramiko实验4,分组操作,ENSP_指令集

实验目的

  1. 192.168.11.11、192.168.11.13、192.168.11.15归类为组1,模拟华为交换机版本:VRP (R) software, Version 5.110 (S5700 V200R001C00),进入 vlanif 1 ,执行 description Python_G1。

2. 192.168.11.12、192.168.11.14归类为组2,模拟华为交换机版本:VRP (R) software, Version 5.110 (S3700 V100R001C00),进入 vlanif 1 ,执行 description Python_G2。

查询华为设备版本可以用 display version

网络工程师的Python之路-paramiko实验4,分组操作,ENSP_运维_02

实验准备

在实验文件夹中,建立各组的 IP 清单列表及执行命令,如下图所示。

网络工程师的Python之路-paramiko实验4,分组操作,ENSP_指令集_03

按照拓扑,每台交换机 vlan 1 都配置 vlanif 的 IP 作为管理,需做到能手工逐台登录,具体可参见前序文章,链接如下:

sysname L3SW1

aaa

local-user python password cipher 123
local-user python privilege level 15
local-user python service-type ssh

interface Vlanif1
ip address 192.168.11.11 255.255.255.0

stelnet server enable
ssh authentication-type default password

user-interface con 0
user-interface vty 0 4
authentication-mode aaa
protocol inbound ssh

实验前检查

  1. 按之前实验套路,对 L3S1 到 L3S5 逐一检查 PC 到 L3S1 至 L3S5 的网络连通性,如不通需要排网络,本文此处描述从简。

2. 检查各组每台交换机的 vlanif 是否有描述信息,实验前应如下图,如有冗余配置可手工删除掉。

网络工程师的Python之路-paramiko实验4,分组操作,ENSP_指令集_04

Python 代码

代码 

​​@弈心​​

 大神在视频和书中都逐条做了详细解释,如需要请移步阅读,强烈建议看视频中的代码解释。这里我将其代码中的思科指令修改成华为指令,让实验能在华为设备来跑起来。推进到现在,华为指令被放在了 txt 文件中,不用在代码中了。这样代码就更简洁了哈,这可以说就是利用了模块化和封装思想吧。升华一下。咱们一步一步给自己制作些属于自己的轮子,然后有天咱们就可以装车出发,或者能用别人制造的轮子了。

import paramiko
import time
import getpass
import sys

username = input("Username: ")
password = getpass.getpass("Password: ")
ip_file = sys.argv[1]
cmd_file = sys.argv[2]

iplist = open(ip_file,'r')
for line in iplist.readlines():
ip = line.strip()
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=ip,username=username,
password=password,look_for_keys=False)
print('=-=-=-=-=-=-=-=-=-=-=-=-=-=')
print('已经成功登陆交换机 ' + ip)
command = ssh_client.invoke_shell()
cmdlist = open(cmd_file,'r')
cmdlist.seek(0)
for line in cmdlist.readlines():
each_command = line.strip()
command.send(each_command + '\n')
time.sleep(0.5)
cmdlist.close()

output = command.recv(65535).decode('ASCII')
print(output)

ssh_client.close()

网络工程师的Python之路-paramiko实验4,分组操作,ENSP_python_05

实验过程

从 CMD 上进入目录执行。

网络工程师的Python之路-paramiko实验4,分组操作,ENSP_指令集_06

网络工程师的Python之路-paramiko实验4,分组操作,ENSP_运维_07

实验结果检查

display cur int vlanif 1

组一

网络工程师的Python之路-paramiko实验4,分组操作,ENSP_python_08

网络工程师的Python之路-paramiko实验4,分组操作,ENSP_python_09

网络工程师的Python之路-paramiko实验4,分组操作,ENSP_运维_10

网络工程师的Python之路-paramiko实验4,分组操作,ENSP_python_11

网络工程师的Python之路-paramiko实验4,分组操作,ENSP_指令集_12

举报

相关推荐

网络工程师的悲哀

0 条评论