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

De Adadov.net wiki
m (Mise en page)
(12 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
{{Auteur|Adadov}}
== Prérequis ==
== Prérequis ==


Ligne 13 : Ligne 14 :
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 :


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


Pour installer ces modules s'il ne sont pas déjà présents sur votre système le mieux est de se référer à votre distribution pour la méthode d'installation conseillée.
Pour installer ces modules s'il ne sont pas déjà présents sur votre système le mieux est de se référer à votre distribution pour la méthode d'installation conseillée.
Ligne 20 : Ligne 21 :
Sinon il est aussi possible de les installer via CPAN (quelle que soit la distribution) de cette manière.
Sinon il est aussi possible de les installer via CPAN (quelle que soit la distribution) de cette manière.


{{LinuxTerminal|user=root|text=cpan Net::SSH::Perl}}
{{LxTerm|user=root|text=cpan Net::SSH::Perl
{{LinuxTerminal|user=root|text=cpan Sys::Syslog}}
cpan Sys::Syslog}}


=== Planification ===
=== Planification ===
Ligne 41 : Ligne 42 :
== Script ==
== Script ==


{{Info|tip=Il y a un petit bug dans ce script, si le serveur TFTP n'est pas atteignable par le switch l'erreur n'est pas remontée au script ...}}
{{Warn|Il y a un petit bug dans ce script, si le serveur TFTP n'est pas atteignable par le switch l'erreur n'est pas remontée au script ...}}
 
=== Variables ===


Pour utiliser ce script il faut remplir les informations suivantes :
Pour utiliser ce script il faut remplir les informations suivantes :


* $user   : le nom d'utilisateur pour se connecter via {{abbr|SSH|Secured Shell}} sur le switch
{{AlTable
* $pass   : le mot de passe associé
|cols=2|fullwidth=true|row1header=true
* $server : adresse du serveur TFTP, une adresse IP évitera les problèmes de résolution de nom
|class=wikitable
* @hosts : liste des switch à sauvegarder sous la forme ("switch1","switch2","switchX")
|Variable
|Description
|$user  
|le nom d'utilisateur pour se connecter via {{abbr|SSH|Secured Shell}} 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")
}}
 
=== Source ===


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.
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 <code>nom_du_switch-date-confg</code>
Le nom du fichier aura la forme suivante {{Fname|nom_du_switch-date-confg}}.


date est au format Ymd (ex: 20120120)
La date est au format Ymd (ex: 20120120) afin de classer les fichier par date via l'ordre alphabétique.


<syntaxhighlight lang="perl">
<syntaxhighlight lang="perl">
Ligne 63 : Ligne 77 :
use Net::SSH::Perl;
use Net::SSH::Perl;
use POSIX qw(strftime);
use POSIX qw(strftime);
use Sys::Syslog qw( :DEFAULT setlogsock);
use Sys::Syslog qw(:DEFAULT setlogsock);


# Variables à configurer
# Variables à configurer
my $user = "admin"; #switch username
my $user = "admin";                 # Nom d'utilisateur
my $pass = ""; #switch password
my $pass = "";                     # Mot de passe
my $server = ""; #TFTP server
my $server = "";                   # Serveur TFTP
my @hosts = ("switch1","switch2");
my @hosts = ("switch1","switch2"); # Liste des switch




Ligne 107 : Ligne 121 :


[[Category:Networking]]
[[Category:Networking]]
[[Category:Cisco]]

Version du 3 mars 2015 à 20:56

Ecrit Par : Adadov

Prérequis

Afin de pouvoir utiliser ce script tous les switch doivent être capable d'accepter les connexions SSH.

Il faudra aussi avoir configuré un couple utilisateur/mot de passe identique sur chacun des switch afin de pouvoir ouvrir les connexions à la chaine.

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

Pour installer ces modules s'il ne sont pas déjà présents sur votre système le mieux est de se référer à votre distribution pour la méthode d'installation conseillée.

Sinon il est aussi possible de les installer via CPAN (quelle que soit la distribution) de cette manière.

[root@linux] # cpan Net::SSH::Perldblclick to copy
[root@linux] # cpan Sys::Syslog

Planification

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

Pour ce faire le plus simple reste d'utiliser Cron et de placer le script dans le dossier /etc/cron.daily/.

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

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

Variables

Pour utiliser ce script il faut remplir les informations suivantes :

Variable Description
$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")

Source

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 .

La date est au format Ymd (ex: 20120120) afin de classer les fichier par date via l'ordre alphabétique.

#!/usr/bin/perl

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

# Variables à configurer
my $user = "admin";                 # Nom d'utilisateur
my $pass = "";                      # Mot de passe
my $server = "";                    # Serveur TFTP
my @hosts = ("switch1","switch2");  # Liste des switch


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('err', $host.': Config not saved ',$stderr); } else { logit('info', $host.': Config saved'); }
  };
  ($@) ? ( logit('err', $@) ) : undef;
}

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