400-035-6699
当前位置: 首页 » 技术支持 » 博文资讯 »

使用paramiko在eNSP交换机上批量创建VLAN

网络管理中,自动化处理是一项提高效率和降低工作强度的重要手段。本文将介绍如何使用Python语言结合paramiko库实现SSH连接到网络设备并自动化配置VLAN的过程。
首先,我们需要了解一些基础概念。SSH(Secure Shell)是一种安全协议,用于在网络中远程登录和执行命令。paramiko是一个Python库,提供SSHv2协议的客户端实现,可用于自动化的远程设备管理
在编写Python脚本之前,我们需要确保网络设备已经开启了SSH服务,并且有权限进行远程登录和配置。本文将以华为网络设备为例进行说明。
接下来,我们开始编写Python脚本。首先导入paramiko库以及其他必要的库:
```python import paramiko import time import getpass ```
然后,通过input函数获取SSH的用户名,并通过getpass函数获取密码。密码输入时将不可见,但需要注意的是,在Windows系统中密码可能可见,需要提前做好保护措施
接下来,我们创建一个ip地址列表,用于存放设备的IP地址。这里以五台设备为例,我们假设它们的IP地址分别为192.168.56.11、192.168.56.22、192.168.56.33、192.168.56.44和192.168.56.55。
使用for循环遍历IP地址列表,对每台设备进行SSH连接和配置。连接时,使用paramiko库中的SSHClient类,并设置自动添加未知主机密钥的策略。连接成功后,使用invoke_shell()方法唤醒shell界面,并使用send()方法发送命令进行配置。
在配置过程中,我们创建VLAN,并为每个vlan设置描述。由于网络设备的响应速度可能不同,为了确保配置成功,我们可以在创建每个VLAN后暂停1秒钟。
配置完成后,我们需要保存配置并关闭连接。使用send()方法发送save命令保存配置,并使用recv()方法接收设备返回的信息,最多接收65535个字符。最后,关闭SSH连接。
在编写脚本时,我们还可以考虑异常处理,以确保脚本的健壮性。例如,当设备连接失败或命令执行失败时,我们可以捕获异常并给出相应的提示信息。
此外,为了方便管理更多设备,我们可以将设备的IP地址存储在文本文件中,并在脚本中读取这些地址。这样可以避免手动修改脚本中的IP地址列表,提高脚本的通用性。
最后,我们可以将脚本保存为.py文件,并在Python环境中运行。运行脚本后,我们可以查看网络设备的配置信息,确认VLAN是否创建成功。
总结起来,使用Python和paramiko库实现网络设备的自动化配置,可以提高网络管理的效率,减轻管理员的工作强度。在实际应用中,我们可以根据具体需求对脚本进行修改和扩展,以满足不同的网络管理场景。

来源:公众号【网络技术干货圈】

使用paramiko在eNSP交换机上批量创建VLAN

作者:圈圈

ID:wljsghq

实验拓扑:

cf825656-b777-11ee-8b88-92fbcf53809c.png
cloud连接本机,ip地址为192.168.56.1,五台交换机的配置的地址为192.168.1.11~55。现在通过paramiko,ssh进入五台设备,并且在五台设备上分别创建vlan10-vlan20这11个VLAN。

版本:python3.9

实验步骤

一、ssh配置:

##创建秘钥
[sw2]dsalocal-key-paircreate

##配置SSH认证类型(密码/其他)
[sw2]sshuserprinauthentication-typepassword
[sw2]sshuserprinservice-typesTelnet
[sw2]stelnetserverenable

##配置认证模式
[sw2]user-interfacevty04
[sw2-ui-vty0-4]authentication-modeaaa//配置认证模式
[sw2-ui-vty0-4]protocolinboundssh//允许ssh连接虚拟终端

##配置本地用户信息
[sw2]aaa
[sw2-aaa]local-userprinpasswordcipherHuawei@123
[sw2-aaa]local-userprinprivilegelevel15
[sw2-aaa]local-userprinservice-typessh

二、python脚本:

importparamiko
importtime
importgetpass

#使用input函数,输入SSH的用户名
username=input('Username:')
#通过getpass()函数接收密码,密码是不可见的,但是在windows上有bug,密码可见
password=getpass.getpass('Password:')

#创建一个列表,表示五台设备最后8位的地址
ip_tail_list=[11,22,33,44,55]

#使用for循环,接受SSH的秘钥,并分别依次连接到五台设备,注意需要将i转化为字符串
foriinip_tail_list:
ip="192.168.56."+str(i)
ssh_client=paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=ip,username=username,password=password)

print("Successfullyconnectto",ip)

#使用invoke_shell()唤醒shell界面
command=ssh_client.invoke_shell()

#使用command.send()函数创建VLAN,并且设置每个VLAN的描述;未来保证设备能够正常接受配置,每次创建1个VLAN后休息1s
command.send("system
")

forninrange(10,21):
print("CreatingVlan"+str(n))
command.send("vlan"+str(n)+"
")
command.send("descriptionPythonVlan"+str(n)+"
")
time.sleep(1)

#保存配置,并且通过command.recv()函数得到回信的信息,最多接受65535个字符
command.send("return
")
command.send("save
"+"y
"+"
")
time.sleep(2)
output=command.recv(65535)
print(output.decode('ascii'))

#关闭连接
ssh_client.close()

如果管理的设备数目过多,可以直接通过读取txt文件的方式获取IP地址,仅需要将如下代码:

#创建一个列表,表示五台设备最后8位的地址
ip_tail_list=[11,22,33,44,55]

#使用for循环,接受SSH的秘钥,并分别依次连接到五台设备,注意需要将i转化为字符串
foriinip_tail_list:
ip="192.168.56."+str(i)
ssh_client=paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=ip,username=username,password=password)
#......省略中间部分
ssh_client.close()

更换为下述即可:

#使用open()函数打开ip_list文件,并将读取的结果赋予f
f=open("ip_list.txt","r")

#调用readlines()函数,返回IP地址的列表,并使用for循环遍历;注意使用readlines()的每一个ip地址后带有
,需要通过strip()函数去除
foriinf.readlines():
ip=i.strip()
ssh_client=paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=ip,username=username,password=password)
#.......省略中间部分,在完成文件操作后,关闭文件
f.close()
ssh_client.close()

执行效果:

cf9a9ae0-b777-11ee-8b88-92fbcf53809c.png

在设备上检查是否配置成功,以SW1为例:
cfb985d6-b777-11ee-8b88-92fbcf53809c.png
可以看到创建VLAN和添加VLAN描述成功。

审核编辑:汤梓红

【限时免费】一键获取网络规划系统模板+传输架构设计+连通性评估方案

相关文章

服务电话:
400-035-6699
企服商城