Bonjour,
je vous écris car j'essaye sur une VM Linux Perl 5.14 de faire un script pour me connecter des équipements réseaux et y passer des commandes.
" loi de Murphy" oblique, cette VM est sur le réseau d'un client, donc pas possible d'installer des modules. Il faut faire avec ce qu'il y a, un ssh + expect du pauvre.
Une connexion réussi ressemble à ci-dessous ou il redemande login et mot de passe
XXX@ZZZ$ ssh -o StrictHostKeyChecking=no -o ConnectTimeout=3 -l admin 10.150.227.1
User Access Verification
Username: admin
Password:
This equipment is private - Keep Off!
smwifi01.chambe.XXX.fr*>
Dans mon script j'essaye de récupérer les valeurs retourner pour voir par exemple si j'ai bien Username: qui apparaît pour envoyer automatiquement mon login préalablement mis dans une variable.
Le problème c'est que je reste bloqué au moment de mettre le login une fois connecté, il ne semble pas passer la valeur
perl script.pl
Login: admin
Password: TOTO
Fichier IP:source.txt
Fichier ligne de commandes:CLI.txt
User Access Verification
Voici le script qui est encore à l'état brouillon car pas finis. Ca peut piquer un peu les yeux
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
| use strict;
use warnings;
use Data::Dumper;
use feature 'say';
no warnings 'uninitialized';
my @fail;
my @CLI;
my $pass;
my $mire;
my @ip;
my $ssh_cli = 'ssh -o StrictHostKeyChecking=no -o ConnectTimeout=3 -l';
print 'Login: ';
chomp (my $login = <>);
print 'Password: ';
chomp (my $password = <>);
print 'Fichier IP: ';
chomp (my $SOURCE = <>);
print 'Fichier ligne de commandes:';
chomp (my $commande = <>);
open (my $source, "<", $SOURCE) or die "Can't open: $!";
while (my $line = <$source>) {
$line =~ s/[\r\n]+//;
push @ip, $line;
}
open (my $cli, "<", $commande) or die "Can't open: $!";
while (my $line = <$cli>) {
$line =~ s/[\r\n]+//;
push @CLI, $line;
}
foreach my $ip (@ip) {
my $SSH = system "$ssh_cli $login $ip";
if ($SSH =~ /username/i) {
my $pass = system "$login";
} else {
say "Connexion SSH $ip echec";
push @fail, $ip;
say '-' x 20;
next;
}
if ($SSH =~ /password/i) {
my $mire = system "$password";
} else {
say "Connexion SSH $ip echec";
push @fail, $ip;
say '-' x 20;
next
}
if ($SSH =~ /[>]$/) {
foreach (@CLI) {
say "$_";
my $resultat = system "$_";
print "$resultat";
}
} else {
say "Commande show version KO";
push @fail, $ip;
next;
}
}
say;
say '### Connexion SSH KO ###';
foreach (@fail) {
say "$_";
} |
Je pense que le match fonctionne mais que ca doit bloquer à invoquer sur l'équipement distant la commande à rentrer.
C'est ce bout
my $pass = system "$login";
qui doit bloquer
J'ai essayer avec print "$login\r" sans succès non plus.
Une piste? Une intuition? Je prend tout
Partager