前面的几个实验是基于一批设备的类型、型号、版本等都一致的情况下进行的。但是,实际现网运维中,数通设备产品线广阔,同样的产品还有众多型号,即便同型号的设备还有不同的软件版本。这些差异造成相应的指令集可能有微小差别,甚至天差地别。本实验通过设备分组模拟现网批次设备间的差异,配合 sys.argv ,让不同组调用不同的预设脚本。
sys.argv举个例子:C:\Users\86157\Desktop>py lab3.py ip_list.txt cmd_list.txt
这时argv = ['lab3.py', 'ip_list.txt', 'cmd_list.txt'] 我们代码里的: sys.argv[0]等同于lab3.py; sys.argv[1],此时也就等同于ip_list.txt; sys.argv[2], 此时也就等同于cmd_list.txt。
input()函数和getpass模块在针对Telnetlib、Netmiko模块的基础知识讲解中,我们都将SSH登录的用户名和密码明文写在了脚本里,这种做法在实验练习中可以使用,但是在生产环境中是不够安全的。在生产环境中,正确的做法是使用input()函数和getpass模块来分别提示用户手动输入SSH用户名和密码。
getpass是Python的内建模块,无须通过pip下载安装即可使用。它和input()函数一样,都是Python的交互式功能,用来提示用户输入密码,区别是如果用input()输入密码,用户输入的密码是明文可见的,如果你身边坐了其他人,密码就这么暴露了。而通过getpass输入的密码则是隐藏不可见的,安全性很高,所以强烈建议使用getpass来输入密码,使用input()来输入用户名。
实验拓扑将ensp的LSW1与本地虚拟网卡loopback0进行桥接,模拟将自己的电脑桥接到以下拓扑网络中。
实验目的LSW3、LSW5的stp模式改为stp。LSW2、LSW4的stp模式改为RSTP。
实验准备分别创建两个文本,分别存放LSW3+LSW5和LSW2+LSW4的管理ip。在创建两个文本分别存放配置为STP和RSTP的命令。
注意在配置文件里写配置时,不要写sys和return,因为 send_config_from_file本身就带有这两条命令,也不可直接用save保存,否则会报错。
创建脚本,我这里是lab8.py。
实验脚本from netmiko import ConnectHandler
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()
SW={
'device_type':'huawei',
'ip':ip,
'username':username,
'password':password,
}
connect=ConnectHandler(**SW)
print('\n-----------------已成功登录交换机'+ip+'------------------\n')
output=connect.send_config_from_file(cmd_file)
print(output)
result=connect.send_command('dis stp | include CIST Global Info')#查看配置结果
print(result)
connect.save_config()
实验结果iplist=open(ip_file,'r')由于ip_file是文件对象,不是具体的文件名,所以不用加单引号。
在cmd分别执行:
py lab8.py G1_ip.txt G1_cmd.txt
py lab8.py G2_ip.txt G2_cmd.txt
lab8.py、G1_ip.txt、 G1_cmd.txt、 G2_ip.txt、 G2_cmd.txt要在同一个文件夹里
如果现网有华为、思科的设备,而他们的配置命令有所不同,就可以创建两个命令组,分别存放各自的命令, 就是分组处理。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)