Выполнение команд на нескольких свитчах HP

Материал из Mindsellers
Перейти к: навигация, поиск

Python

Для выполнения серии команд на свитчах HP написан нижеследующий скрипт. На вход ему подается файл с командами (каждая с новой строки) и список свитчей, с указанием, или не-указанием порта, логина и пароля, например:

10.10.10.10
10.10.10.10,22
10.10.10.10,22,root,pass
10.10.10.10,,newpass

Соответственно, порт по умолчанию 22, а логин и пароль пустые.

В системе необходимо поставить 2 модуля:

pip install getch paramiko
#########Imports#######
import paramiko
import getch
import os

#########Usage#########

print """
This script Executing list of commands at number of hp switches.
It must be a list of switches in some file (default is 'list.txt') in this format
ip1,port1,user1,pass1
ip2,port2,user2,pass2
.....
ipN,portN,userN,passN


for example,
10.10.10.10,22,root,asdada
but
10.10.10.10,22
or
10.10.10.10,,root,adadas
is valid as well

And it must be some list of commands in some file (default is 'command.txt')
contains jist a commands, one per line

Let's Start!
"""
######Read and test filenames####
list = raw_input("List of Switches[list.txt]: ") or "list.txt"
if os.path.isfile(list):
    print "OK"
else:
	print "File not found"
	getch.pause()
	exit()
	
command = raw_input("List of commands[command.txt]: ") or "command.txt"
if os.path.isfile(command):
    print "OK"
else:
	print "File not found"
	getch.pause()
	exit()

####Read files to lists#####	
commandfile=open(command)
commandlist=commandfile.read().splitlines()
commandfile.close()
print commandlist

f = open(list)
filelines = f.read().splitlines()
f.close()
print filelines

#####Main Function#####
def connect(host="1.1.1.1",port="22",username="",password="",commandlist=["",""]):
	print 'start function for '
	print 'host='+host
	try:
		client = paramiko.SSHClient()
		client.set_missing_host_key_policy(paramiko.AutoAddPolicy())	
		client.connect(host,username=username,password=password)
		ssh = client.invoke_shell()
		ssh.send('\n')
		print ssh.recv(10000)
		for command in commandlist:
			ssh.send(command+'\n')
			print ssh.recv(10000)
		ssh.close()
		client.close()
	except:
		print 'Cannot connect to '+str(host)

######Main circle######

for hp in filelines:
	for i in range(3 - hp.count(',')):
		hp=hp+','
		
	host, port, user, password = hp.split(',')
	connect(host, port, user, password, commandlist)		

print '\n'
print '\n'
print '\n'
print '\n'
print '\n'
print 'Complited'
getch.pause() 

exit(0)

А скомпилированный под windows файл - По ссылке