#! /usr/bin/python # Extreme Networks XOS Configuration Backup # (c) 2013 by niston cloud # http://niston.wordpress.com # Released under a MIT License import pexpect import datetime import time import csv import os import subprocess import string # set this to your admin password Password="AdminPassword" ssh_newkey='continue connecting' ssh_pass='password' curtime = time.strftime("%Y%m%d%H%M") # execute command line with keyboard-interactive password def iexec(cmdline, password): p=pexpect.spawn(cmdline) i=p.expect([ssh_newkey,ssh_pass,pexpect.EOF]) if i==0: print "Adding new key" p.sendline('yes') i=p.expect([ssh_newkey,'password',pexpect.EOF]) if i==1: #print "Sending pass" p.sendline(Password) p.expect(pexpect.EOF) elif i==2: print "Connection failed" pass return p.before with open('switches.csv', 'rb') as csvfile: x = csv.reader(csvfile, delimiter=',', quotechar='|') for row in x: switch = list(row) switchName = switch[0].strip() switchAddr = switch[1].strip() print 'Switch Name:', switchName print 'Switch Addr:', switchAddr # save running config as current.xsf print "Saving running config to current.xsf" iexec("ssh -t admin@" + switchAddr + " 'save config as current'", Password) # download current.xsf print "Downloading current.xsf from switch" result = iexec("sftp admin@" + switchAddr + ":current.xsf ./" + switchName + "_" + curtime + "_config.xsf", Password) rlines = result.splitlines() for line in rlines: if ('100%' in line): print line # remove current.xsf print "Removing current.xsf from switch" iexec("ssh -t admin@" + switchAddr + " 'rm current.xsf'", Password) print "------------------------------------" print '' print "Creating TGZ archive..." os.system("tar -zcf extreme_`date +%Y%m%d%H%M`.tgz *.xsf") print "Cleaning up..." os.system("rm *.xsf")