Cisco : Script de sauvegarde automatique des configurations des switch

De Adadov.net wiki

Sauvegarder automatiquement les configurations d'une liste de switch cisco avec un script perl

Par contre il ne faut pas oublier d'ouvrir les ports du firewall, pour tftp c'est le port UDP 69, le mieux est de le restreindre sur les plages des switch ;-)

-A INPUT -m state --state NEW -m udp -p udp --dport 69 -j RANGE.0
-A RANGE.0 -s 192.168.0.0/24 -j ACCEPT
-A RANGE.0 -s 192.168.1.0/24 -j ACCEPT

FIXME Il y a un petit bug dans ce script, si le serveur n'est pas atteignable par le switch l'erreur n'est pas remontée au script ...

#!/usr/bin/perl

use strict;
use Net::SSH::Perl;
use POSIX qw(strftime);
use Sys::Syslog qw( :DEFAULT setlogsock);

# Variables à configurer
my $user = "admin"; #switch username
my $pass = ""; #switch password
my $server = ""; #TFTP server
my @hosts = ("switch1","switch2");


sub logit {
	my $programname;
	my ($priority, $msg) = @_;
	return 0 unless ($priority =~ /info|err|debug/);
	
	setlogsock('unix');
	openlog($programname, 'pid,cons', 'local1');
	syslog($priority, $msg);
	closelog();
	return 1;
}

BEGIN {
	logit('info', 'Cisco conf Backup Started');
}


my $now = strftime("%Y%m%d", localtime(time));

foreach my $host (@hosts) {
	my $ssh = Net::SSH::Perl->new($host);
	$ssh->login($user,$pass);
	eval {
		my ($stdout, $stderr, $exit) = $ssh->cmd('copy running-config tftp://'.$server.'/',"\n".$host."-".$now."-confg\n");
		if($exit!='0') { logit('error', $host.': Config not saved ',$stderr); } else { logit('info', $host.': Config saved'); }
	};
	($@) ? ( logit('error', $@) ) : undef;
}

END {
	logit('info', 'Cisco conf Backup Ended');
}