?前言:
Python 可以用于编写自动化网络任务,例如自动化网络设备配置、网络监控、网络流量分析、远程执行等。例如,使用 pysnmp、netmiko、paramiko等库可以轻松地实现这些任务。通过Python可以得到设备输出的信息,进一步人为分析和处理。
今天小云君分享几个简单的自动化配置运维小实验:
?实验1:批量创建交换机loopback接口并配置IP地址
?实验2:批量创建VLAN,并加入成员端口
?实验3:批量查看设备版本,并输出保存至本地文件
Python3版本
visual studio code代码编辑器
eNSP华为模拟器
完成基本的IP配置后,测试电脑虚拟接口能正常ping通所有交换机:
第一步:首先启用所有交换机的SSH功能?
[Huawei]user-interface vty 0 4
[Huawei-ui-vty0-4]authentication-mode aaa
[Huawei-ui-vty0-4]protocol inbound ssh
[Huawei-aaa]local-user admin password cipher 12356
[Huawei-aaa]local-user admin privilege level 15
[Huawei-aaa]local-user admin service-type ssh
[Huawei]stelnet server enable
[Huawei]ssh authentication-type default password
第二步:编写python脚本,使用paramiko模块(是python基于SSH用于远程服务器并执行相应的操作,需要安装在python路径下)
import?paramiko?#加载paramiko模块,提供python中的SSH服务
import?time
ips = ["192.168.56.200","192.168.56.201","192.168.56.202","192.168.56.203","192.168.56.204","192.168.56.205","192.168.56.206"]
username =?'admin'
password =?'123456'
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())?#默认情况下,Paramiko会拒绝任何未知的SSH public keys,使用此函数使其接收来自交换机提供的public keys。
for?ip?in?ips:
????ssh_client.connect(hostname=ip, username=username, password=password, look_for_keys=False)?#ssh连接设备,密码错误则提示报错
????print('Successfully connect to '?+ ip)
????commend = ssh_client.invoke_shell()?#进入client命令窗口,输入ssh指令获取信息
????commend.send('sys\n')
????commend.send('interface LoopBack 0\n')
????commend.send('ip add 1.1.1.1 255.255.255.255\n')
????commend.send('return\n')
????commend.send('save\n')
????commend.send('y\n')
????time.sleep(2)?#稍等2秒,确保保存生效后能执行以下操作
????commend.send('dis ip int brief LoopBack 0\n')?#显示修改结果
????time.sleep(2)?#稍等2秒读取窗口回显,然后执行以下操作
????output= commend.recv(65535)?#截取本次运行script后的所有输出记录,将其assign给output变量
????print(output.decode("ascii"))?#字符ascii表示,如果不做编译就会显示\n,输出结果没有换行
????
????ssh_client.close
第三步:运行脚本,查看结果
OK,可以通过结果看到所有交换机的loopback ? ?0接口已经创建,并配置了IP 1.1.1.1/24。大家也可以到eNSP里面挨个敲交换机的命令查看结果。
第一步:首先启用所有交换机的SSH功能
第二步:编写python脚本,使用paramiko模块(是python基于SSH用于远程服务器并执行相应的操作,需要安装在python路径下)
import?paramiko?#加载paramiko模块,提供python中的SSH服务
import?time
ips = ["192.168.56.200","192.168.56.201","192.168.56.202","192.168.56.203","192.168.56.204","192.168.56.205","192.168.56.206"]
username =?'admin'
password =?'123456'
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())?#默认情况下,Paramiko会拒绝任何未知的SSH public keys,使用此函数使其接收来自交换机提供的public keys。
for?ip?in?ips:
????ssh_client.connect(hostname=ip, username=username, password=password, look_for_keys=False)?#ssh连接设备,密码错误则提示报错
????print('Successfully connect to '?+ ip)
????commend = ssh_client.invoke_shell()?#进入client命令窗口,输入ssh指令获取信息
????commend.send('sys\n')
????commend.send('vlan 10\n')?#创建VLAN 10
????commend.send('port-group 1\n')?#创建端口组1
????commend.send('group-member g0/0/21 g0/0/22\n')?#将GigabitEthernet0/0/21和22扣加入该组
????commend.send('port link-type access\n')
????commend.send('port default vlan 10\n')
????commend.send('return\n')
????commend.send('save\n')
????commend.send('y\n')
????time.sleep(2)?#稍等2秒,确保保存生效后能执行以下操作
????commend.send('dis vlan 10\n')?#显示修改结果
????time.sleep(2)?#稍等2秒读取窗口回显,然后执行以下操作
????output= commend.recv(65535)?#截取本次运行script后的所有输出记录,将其assign给output变量
????print(output.decode("ascii"))?#字符ascii表示,如果不做编译就会显示\n,输出结果没有换行
????
????ssh_client.close
第三步:运行脚本,查看结果
可以看到Terminal输出所有交换机都配置了VLAN10,并且成员端口均为21和22口。
为保证安全性,定期批量修改设备的web登录密码,并输出修改记录保存至本地txt文件;
第一步:首先启用所有交换机的SSH功能
第二步:编写python脚本,使用paramiko模块(是python基于SSH用于远程服务器并执行相应的操作,需要安装在python路径下)
import?paramiko?#加载paramiko模块,提供python中的SSH服务
import?time
ips = ["192.168.56.200","192.168.56.201","192.168.56.202","192.168.56.203","192.168.56.204","192.168.56.205","192.168.56.206"]
username =?'admin'
password =?'123456'
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())?#默认情况下,Paramiko会拒绝任何未知的SSH public keys,使用此函数使其接收来自交换机提供的public keys。
for?ip?in?ips:
????ssh_client.connect(hostname=ip, username=username, password=password, look_for_keys=False)?#ssh连接设备,密码错误则提示报错
????print('Successfully connect to '?+ ip)
????commend = ssh_client.invoke_shell()?#进入client命令窗口,输入ssh指令获取信息
????commend.send('sys\n')
????commend.send('aaa\n')?#进入aaa
????commend.send('local-user huawei password simple 20240116\n')?#修改登录账号huawei的新密码为20240116
????commend.send('local-user huawei service-type http\n')?#账号huawei登录类型为http
????commend.send('local-user huawei privilege level 3\n')?#账号huawei权限等级为3
????commend.send('return\n')
????commend.send('save\n')
????commend.send('y\n')
????time.sleep(2)?#稍等2秒,确保保存生效后能执行以下操作
????commend.send('dis local-user username huawei\n')?#显示修改结果
????time.sleep(2)?#稍等2秒读取窗口回显,然后执行以下操作
????output= commend.recv(65535)?#截取本次运行script后的所有输出记录,将其assign给output变量
????print(output.decode("ascii"))?#字符ascii表示,如果不做编译就会显示\n,输出结果没有换行
????
????ssh_client.close
file_path =?"C:/Users/lty/Desktop/公众号/python实现网络自动化/mypassword.txt"??# 指定保存路径及文件名mypassword,注意是反斜杠格式
with?open(file_path,?'wb')?as?file:?#打开文件并写入内容,写入要用'wb'而不是'w',使用二进制写入模式(‘wb’)来开启待操作文件,不能像原来那样采用字符写入模式(‘w’)
????file.write(output)
print("已成功保存输出结果至", file_path)
第三步:运行脚本,查看结果
结果显示所有交换机密码已被修改成功为20240116,明文形式保存。
第四步:查看终端输出结果保存的路径,存在生成的“mypassword.txt”文件:
打开内容,可以看到已经保存了密码修改记录:
? ? 原创不易,感谢大家支持!!?