最近在交付一个项目,项目结束后需要checklist网络设备的配置。需要在很多设备上执行相同的命令,想起用paramiko连接交换机批量执行,拷了前面用于连接华为交换机的代码发现报认证失败,把代码改成transport方式连接后正常。临时用的代码,很糙将就一下。
h3c_check.py 主文件,使用方法,先安装paramiko,把交换机管理IP分类写到conf.py文件,执行python h3c_check.py '交换机命令' 'conf.py里定义的交换机组名'
如: python h3c_check.py 'display bgp peer ipv4' 'asw'
#-*- coding: utf-8 -*-
#!/usr/bin/python
import paramiko
import time
import os
import sys
from conf import *
cmd=sys.argv[1]
swtype=sys.argv[2]
#定义连接与操作
def ssh2(ip,user,pas,cmd):
transport = paramiko.Transport((ip, 22))
transport.connect(username=user, password=pas)
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh._transport = transport
stdin, stdout, stderr = ssh.exec_command(cmd)
result = stdout.read()
print(result.decode(encoding="utf-8"))
time.sleep(float(1))
transport.close()
#判断要在哪个类型交换机上执行命令
def swtypes(swtype):
if swtype=='asw' :
swips = aswip
elif swtype=='dsw' :
swips = dswip
elif swtype=='lsw' :
swips = lswip
elif swtype=='isw' :
swips = iswip
elif swtype=='cdlisw':
swips = cdliswip
elif swtype=='omr' :
swips = omrip
elif swtype=='csw' :
swips = cswip
elif swtype=='alsw' :
swips = alswip
elif swtype=='oasw' :
swips = oaswip
else :
print "The swtypes error,input correct swtyps!"
exit()
for key in swips :
ip=swips[key]
ssh2(ip,user,pas,cmd)
if __name__=='__main__':
print "Begin......"
swtypes(swtype)
conf.py,把交换机分组执行的时候加变量选要操作的组。组名对应上面IF语句。格式如下,涉及隐私删除了很多,只保留几台。注意IP对就可以。
#-*- coding: utf-8 -*-
#!/usr/bin/python
#定义交换机的用户名密码
user='admin'
pas='*********'
#定义要执行操作的交换机的组,注意IP要可连接
aswip={
'ASW-201-75.XX190' : '10.73.0.1',
};
cdliswip={
'CSW-VM-VPC-G1-1.XX190' : '10.73.0.21',
};
dswip={
'DSW-VM-G1-P-1.XX190' : '10.73.0.5',
};
cswip={
'CSW-VM-VPC-G1-1.XX190' : '10.73.0.21',
};
iswip={
'ISW-VM-G1-1.XX190' : '10.73.0.23',
};
lswip={
'LSW-VM-G1-1.XX190' : '10.73.0.7',
};
omrip={
'OMR-VM-G1-1.XX190' : '10.73.5.248',
};
oaswip={
'OSW-VM-S-1.XX190' : '10.73.3.50',
};
alswip={
'ASW-201-75.XX190' : '10.73.0.1',
};