« Cisco : Script de sauvegarde automatique des configurations des switch » : différence entre les versions

De Adadov.net wiki
mAucun résumé des modifications
Aucun résumé des modifications
Ligne 1 : Ligne 1 :
== Installation du Script ==
Pour sauvegarder automatiquement les configurations des switch Cisco sur un parc on va utiliser un petit script PERL fait maison.
Pour sauvegarder automatiquement les configurations des switch Cisco sur un parc on va utiliser un petit script PERL fait maison.
=== Environement PERL ===


Il va donc nécessiter une machine sur laquelle PERL est installé avec les modules suivants :
Il va donc nécessiter une machine sur laquelle PERL est installé avec les modules suivants :
Ligne 5 : Ligne 9 :
  * Net::SSH::Perl
  * Net::SSH::Perl
  * Sys::Syslog
  * Sys::Syslog
=== Planification ===


Il faudra aussi utiliser une tâche planifié pour lancer le script régulièrement.
Il faudra aussi utiliser une tâche planifié pour lancer le script régulièrement.
=== Serveur TFTP ===


Nous aurons aussi besoin d'un serveur {{abbr|TFTP|Trivial File Transfer Protocol}} pour recevoir les configurations facilement.<br />
Nous aurons aussi besoin d'un serveur {{abbr|TFTP|Trivial File Transfer Protocol}} pour recevoir les configurations facilement.<br />
Ligne 15 : Ligne 23 :
  -A RANGE.0 -s 192.168.0.0/24 -j ACCEPT
  -A RANGE.0 -s 192.168.0.0/24 -j ACCEPT
  -A RANGE.0 -s 192.168.1.0/24 -j ACCEPT
  -A RANGE.0 -s 192.168.1.0/24 -j ACCEPT
== Script ==


{{Info|tip=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 ...}}
{{Info|tip=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 ...}}

Version du 7 février 2012 à 13:56

Installation du Script

Pour sauvegarder automatiquement les configurations des switch Cisco sur un parc on va utiliser un petit script PERL fait maison.

Environement PERL

Il va donc nécessiter une machine sur laquelle PERL est installé avec les modules suivants :

* Net::SSH::Perl
* Sys::Syslog

Planification

Il faudra aussi utiliser une tâche planifié pour lancer le script régulièrement.

Serveur TFTP

Nous aurons aussi besoin d'un serveur TFTP pour recevoir les configurations facilement.
Il peut se trouver sur la même machine ou bien sur une autre indifféremment.

On commencera par ouvrir les ports du firewall sur la machine qui tourne le serveur TFTP, 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

Script

Pour utiliser ce script il faut remplir les informations suivantes :

* $user   : le nom d'utilisateur pour se connecter via SSH sur le switch
* $pass   : le mot de passe associé
* $server : adresse du serveur TFTP, une adresse IP évitera les problèmes de résolution de nom
* @hosts  : liste des switch à sauvegarder sous la forme ("switch1","switch2","switchX")

Ensuite le script établira l'une après l'autre les connexions SSH vers les switch pour envoyer la commande de transfer du fichier de configuration vers le serveur TFTP.

Le nom du fichier aura la forme suivante nom_du_switch-date-confg

date est au format Ymd (ex: 20120120)


#!/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');
}