Version actuelle |
Votre texte |
Ligne 1 : |
Ligne 1 : |
| {{ArticleHead|Adadov}}
| | Sauvegarder automatiquement les configurations d'une liste de switch cisco avec un script perl |
| == Prérequis ==
| |
|
| |
|
| Afin de pouvoir utiliser ce script tous les switch doivent être capable d'accepter les connexions SSH.
| | 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 ;-) |
| | |
| Il faudra aussi avoir configuré un couple utilisateur/mot de passe identique sur chacun des switch afin de pouvoir ouvrir les connexions à la chaîne.
| |
| | |
| == Installation du Script ==
| |
| | |
| Pour sauvegarder automatiquement les configurations des switch Cisco sur un parc on va utiliser un petit script PERL fait maison.
| |
| | |
| === Environnement 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.
| |
| | |
| {{LxTerm|user=root|text=cpan Net::SSH::Perl
| |
| 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 <code>/etc/cron.daily/</code>.
| |
| | |
| === Serveur TFTP ===
| |
| | |
| Nous aurons aussi besoin d'un serveur {{abbr|TFTP|Trivial File Transfer Protocol}} pour recevoir les configurations facilement.<br />
| |
| 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 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.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 ==
| | 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 ... |
| | |
| {{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 :
| |
| | |
| {{AlTable
| |
| |cols=2|fullwidth=true|row1header=true
| |
| |class=wikitable
| |
| |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.
| |
| | |
| Le nom du fichier aura la forme suivante {{Fname|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.
| |
|
| |
|
| <syntaxhighlight lang="perl"> | | <syntaxhighlight lang="perl"> |
Ligne 77 : |
Ligne 14 : |
| 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"; # Nom d'utilisateur | | my $user = "admin"; #switch username |
| my $pass = ""; # Mot de passe | | my $pass = ""; #switch password |
| my $server = ""; # Serveur TFTP | | my $server = ""; #TFTP server |
| my @hosts = ("switch1","switch2"); # Liste des switch | | my @hosts = ("switch1","switch2"); |
|
| |
|
|
| |
|
Ligne 106 : |
Ligne 43 : |
|
| |
|
| foreach my $host (@hosts) { | | foreach my $host (@hosts) { |
| my $ssh = Net::SSH::Perl->new($host);
| | my $ssh = Net::SSH::Perl->new($host); |
| $ssh->login($user,$pass);
| | $ssh->login($user,$pass); |
| eval {
| | eval { |
| my ($stdout, $stderr, $exit) = $ssh->cmd('copy running-config tftp://'.$server.'/',"\n".$host."-".$now."-confg\n");
| | 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'); }
| | if($exit!='0') { logit('error', $host.': Config not saved ',$stderr); } else { logit('info', $host.': Config saved'); } |
| };
| | }; |
| ($@) ? ( logit('err', $@) ) : undef;
| | ($@) ? ( logit('error', $@) ) : undef; |
| } | | } |
|
| |
|
Ligne 120 : |
Ligne 57 : |
| </syntaxhighlight> | | </syntaxhighlight> |
|
| |
|
| [[Category:NetAdmin]] | | [[Category:Networking]] |
| [[Category:Cisco]]
| |
| [[Catégorie:Backup]]
| |