1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
| #!/usr/bin/perl
#execute une serie de commandes sur des equipements
#les commandes sont a mettre dans le fichier liste.commande
#pas de ligne vide
#les lignes commencant par # ne sont pas prises en compte
#la liste des equipements est dans le fichier liste.routeurs
#ATTENTION la premiere ligne n'est pas prise en compte par le script
use Net::Telnet;
use Time::HiRes qw(usleep); #pour faire une tempo en microsec
use Net::SSH2;
# Demande log/password
while ($user eq "") {
print "\nEntrez login : ";
chomp($user = <STDIN>) ;
}
while ($passwd eq "") {
print "\nEntrez le mot de passe : ";
system('stty','-echo'); #Hide console input for what we type
chomp($passwd = <STDIN>) ;
system('stty','echo'); #Unhide console input for what we type
}
#Chargement du fichier de hosts
print "\nChargement du fichier contenant la liste des equipements...";
$ListeHosts = "liste.routeurs" ;
open(LISTEHOSTS, "<$ListeHosts" ) || die "\nNe peux lire le fichier $ListeHosts: $!";
@hosts = <LISTEHOSTS> ;
close(LISTEHOSTS) ;
print "OK\n";
#Chargement du fichier de commandes
print "\nChargement du fichier contenant la liste des commandes 'liste.commandes'...";
$ListeCommandes = 'liste.commandes' ;
open(LISTECOMMANDES, "<$ListeCommandes" ) || die "\nNe peux lire le fichier $ListeCommandes: $!";
@commandes = <LISTECOMMANDES> ;
close(LISTECOMMANDES) ;
print "OK\n";
#création fichier log
# Appel de la fonction localtime
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year+=1900; # ajout de 1900 a l'annee
$mon+=1; # ajout de 1 au mois car le premier est zero
print "\nCreation du fichier de log...";
open(LOG_FILE, ">LOGS/log.${year}${mon}${mday}${hour}${min}") || die "\nNe peux ecrire dans le fichier log: $!";
print "OK\n\n\n";
print LOG_FILE "Liste des commandes :\n\n";
foreach $commande (@commandes) {
last if $commande eq "\n" ; # Arret sur la premiere ligne vide
next if /^#/; # va a la ligne suivante si commentaire
chomp ($commande); # suppresion du caractere \n
print LOG_FILE "$commande\n";
}
print LOG_FILE "--------------------------------------------------------------------------------------------------------------------\n";
HOST: foreach $host (@hosts)
{
chomp ($host);
last HOST if $host eq "\n";
next HOST if /^#/ ;
print LOG_FILE "--------------------------------------------------------------------------------------------------------------------\n\n";
print LOG_FILE "Host : $host\n";
#connection
my $ssh = Net::SSH2->new();
if(!$ssh->connect($host))
{
print $host . " Connexion impossible: ";
print LOG_FILE "Connexion impossible : \n " ;
next HOST;
}
if(!$ssh->auth_password($user,$passwd))
{
print $host . " Authentication Failed";
exit(1);
print LOG_FILE "Authentication Failed : \n " ;
next HOST;
}
my $channel = $ssh->channel();
$channel->blocking(0);
$channel->shell();
#passage des commandes
foreach $commande (@commandes)
{
chomp($commande);
print $channel "$commande\n";
while (<$channel>)
{
print LOG_FILE "$_"."\n";
}
usleep(100000); # pause de 100 milisecondes entre chaque commande
}
} # Fin de la boucle globale passage HOST suivant
close LOG_FILE; |
Partager