目录
在生产环境中,交换机的管理IP地址基本上不可能是连续,有些交换机的管理IP地址甚至在不通的网段,在这种情况下,我们就不可能用简单的for循环来进行批量登录连续的IP地址的交换机,我们需要额外建立一个文本文件,把需要登陆的交换机的IP地址全部写进去,然后用for循环配合open()函数来读取该文档中的管理IP地址,从而达到批量登录交换机的目的
1.1 实验目的
通过Python脚本批量的登录所有交换机,并在每个交换机上都配置环回口地址
1.2 实验准备
1.在即将创建的python的脚本下创建一个TXT文件,把所有交换机的管理IP都放进去,如下图所示
2.检查所有交换机,确认环回口有没有配置IP地址
3.创建实验脚本lab.py,如上图所示
1.3 实验代码
import paramiko import time username = 'python' password = 'python' f = open("ip_list.txt","r") for line in f.readlines(): ip = line.strip() #去除开头和末尾符号,默认换行符或者空格 client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(hostname=ip, username=username, password=password,look_for_keys=False) print("成功登录到{}".format(ip)) command = client.invoke_shell() command.send('screen-length 0 temporary\n') command.send('sys\n') command.send('undo info-center enable\n') #关闭消息通知 command.send('undo stp enable\n') #关闭生成树 command.send('Y\n') time.sleep(2) command.send('return\n') command.send('save\n') command.send('Y\n') time.sleep(1) output = command.recv(65535) print(output.decode("ascii")) f.close() client.close()
1.4 代码分段讲解
首先还是引入paramiko和time模块,前面有讲的关于这两个模块的内容,不会的笔者可以去看一下,这里就不再赘述
import paramiko import time
定义用户名和密码
username = 'python' password = 'python'
读取文件里的IP地址,并且去除IP地址开头和结尾的换行符,然后登陆设备,使用open函数打开之前创建好的包含5个交换机的管理IP地址的文档,通过for循环一次遍历来依次遍历readlines()方法返回列表中的每个元素,即可达到批量登录SW1-SW3,即使这3个交换机的管理IP地址不是连续的
f = open("ip_list.txt","r") for line in f.readlines(): #readlines()方法读取所有行并返回列表 ip = line.strip() #移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。 client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(hostname=ip, username=username, password=password,look_for_keys=False) print("成功登录到{}".format(ip)) command = client.invoke_shell()
登录每台交换机,然后将命令发送到每台交换机,将回显内容打印出来,结果如下图所示
command.send('undo info-center enable\n') #关闭消息通知 command.send('undo stp enable\n') #关闭生成树 command.send('Y\n') time.sleep(2) command.send('return\n') command.send('save\n') command.send('Y\n') time.sleep(1) output = command.recv(65535) print(output.decode("ascii"))
然后检查每台交换机的配置