主要代码实现目的跟之前的 1.0版本
是一样的,都是为了批量处理交换机的简单基础的命令,例如基本简单的 vlan创建
设备配置备份
创建新用户
等一些基本且每台都需要配置的操作。 本次代码更新主要是为了解决 1.0版本
设备IP不连续的问题,这里的是创建一个 ip_list 的文档进行调用,根据 ip_list 的IP进行逐行的调用登录,直到文本的最后一行。
代码分段解释:
调用对应的python 模块,定义username,password留作后续的调用。在代码存放的相同路径下,创建一个 ip_list.txt 的文件,存放对应需要批量配置的 IP 即可,一行一个IP就行。 如图所示:切忌文本内不要有多余的空行,不然会运行报错的。
import paramiko
import time
import sys
import socket
#输入用户名和密码
username = 'zhangsan'
password = 'abc123456'
#在脚本同目录下,创建一个ip_list的文档,一行一个ip地址
f = open("ip_list.txt","r")
for line in f.readlines():
ip = line.strip()
代码分段解释:
这里是配置 paramiko
模块中的 ssh功能
,并调用之前预设的username,password信息。这里的 command.send(xxxx)
括号内的内容就是向设备发送的命令,结尾的 \n 的意思是说换行,不然的话这些命令全都为一行进行输入了,这里面的内容可以根据你自己对于脚本的要求进行输入。最后一行的 time.sleep(20)
是这些命令输入完成后强制等待20秒钟的回显内容,这里看命令来定吧,时间太短可能会导致命令还没有输完这个连接就已经中断了,为了确保命令输入完成,最好设置等待时间。 这段是我们所需要的核心内容,这里的命令你可以根据你的实际情况进行自定义,这里写的ACL创建,你改成 dis cu 就是设备备份。
#调用ssh登录服务,并指定用户密码等信息
try:
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=ip,username=username,password=password)
#捕捉异常,出现常规异常就会输出 登录异常 IP 。
except Exception as e :
print('登录异常:ip: %s', ip+e)
continue
print('=-=-=-=-=-=-=-=-=-=-=-=-=-=')
print ( "Successfully connect to ", ip)
command = ssh_client.invoke_shell()
command.send('screen-length 0 temporary\n')
# 关闭回显分屏功能
command.send('sys \n')
command.send('acl 3000 \n')
command.send('dis this \n')
command.send('des acc_SW \n')
command.send(' rule 1 permit ip source 10.200.1.20 0 \n')
command.send(' rule 2 permit ip source 10.200.1.2 0 \n')
command.send(' rule 3 permit ip source 10.10.19.251 0 \n')
command.send(' rule 4 permit ip source 10.10.18.139 0 \n')
command.send(' rule 50 deny ip \n')
command.send('com \n')
command.send('q \n')
command.send('user-int vty 0 4 \n')
command.send('acl 3000 in \n')
command.send('q \n')
command.send('q \n')
command.send('save \n')
command.send('y \n')
command.send('q \n')
time.sleep(20)
代码分段解释:
这里是定义了一个 f 值,然后执行一个打开 ip_list 的动作,打开文本后的权限只有 只读 ,然后会根据 ip_list 文本内的ip 进行逐行匹配,然后根据提取的IP进行对,对应输出的文件进行命名。 也根据大佬的优化新增了一个删除多余空行,来实现更好的可读性。
#生成的文件。回显并输入到脚本目录下的result文件夹内。
output = command.recv(65535).decode('accsi')
print(output)
f1 = open(f".\\result\\{ip}logo.txt","w")
f1.write(output)
f.close()
#关闭 ssh 的连接,
ssh_client.close
f1 = open(f".\\result\\{ip}logo.txt","r")
f2 = open(f".\\nanshan\\{ip}_new_logo.txt","w")
for line in f1.readlines():
if line.split():
f2.write(line)
f1.close()
f2.close()
完整代码:
这里代码可以直接复制过去使用
import paramiko
import time
import sys
import socket
#输入用户名和密码
username = 'zhangsan'
password = 'abc123456'
#在脚本同目录下,创建一个ip_list的文档,一行一个ip地址
f = open("ip_list.txt","r")
for line in f.readlines():
ip = line.strip()
#调用ssh登录服务,并指定用户密码等信息
try:
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=ip,username=username,password=password)
#捕捉异常,出现常规异常就会输出 登录异常 IP 。
except Exception as e :
print('登录异常:ip: %s', ip+e)
continue
print('=-=-=-=-=-=-=-=-=-=-=-=-=-=')
print ( "Successfully connect to ", ip)
command = ssh_client.invoke_shell()
command.send('screen-length 0 temporary\n')
# 关闭回显分屏功能
command.send('sys \n')
command.send('acl 3000 \n')
command.send('dis this \n')
command.send('des acc_SW \n')
command.send(' rule 1 permit ip source 10.200.1.20 0 \n')
command.send(' rule 2 permit ip source 10.200.1.2 0 \n')
command.send(' rule 3 permit ip source 10.10.19.251 0 \n')
command.send(' rule 50 deny ip \n')
command.send('com \n')
command.send('q \n')
command.send('user-int vty 0 4 \n')
command.send('acl 3000 in \n')
command.send('q \n')
command.send('q \n')
command.send('save \n')
command.send('y \n')
command.send('q \n')
time.sleep(20)
#生成的文件。回显并输入到脚本目录下的result文件夹内。
output = command.recv(65535).decode('accsi')
print(output)
f1 = open(f".\\result\\{ip}logo.txt","w")
f1.write(output)
f.close()
#关闭 ssh 的连接,
ssh_client.close
f1 = open(f".\\result\\{ip}logo.txt","r")
f2 = open(f".\\nanshan\\{ip}_new_logo.txt","w")
for line in f1.readlines():
if line.split():
f2.write(line)
f1.close()
f2.close()
代码存在问题:
1、使用于所有设备正常可访问,若出现异常报错(例如设备IP不可达,设备用户名密码错误等),代码会中止运行。 2、每次配置脚本不一样的话需要手动修改代码的内容,若是像我这样不是很懂python的朋友,可能会误删除代码内容,导致最终的运行报错。 3、设备和命令都需要一步步的登录,若设备数量较多,等待配置时间会很长。因为代码内容是一行行的运行,一行行的去执行。