j'utilise le module ssh2 de perl pour me connecter a un certain nombre de machine à la suite. Malheureusement, lorsqu'une des machines ne répond pas, le script plante...
J'ai essayé d'enlever les "or die" mais ca n'a rien changé.
L'erreur est à la ligne "$ssh2->connect($HOST)"
Je souhaiterai effectuer un test de connexion sans pour autant faire planter le script si une machine ne répond pas.
Voici le code :
use Net::SSH2 ;
my $ligne;
open ( FILE , "pass.txt" ) or die "Erreur interne pass.txt\n" ;
while ( $ligne = <FILE> ) {
@t = split(";" , $ligne ) ;
for ( my $i = 0 ; $i <= $#t; $i ++) {
if ( $i == 0 ) {
$serveur=$t[$i];
$i ++;
}
if ( $i == 1 ) {
$log=$t[$i];
chomp ($log);
$i ++;
}
if ( $i == 2 ) {
$pass=$t[$i];
chomp ($pass);
}
}
#connexion SSH
my $HOST = "$serveur" ;
my $LOGIN = "$log" ;
my $PWD = "$pass" ;
my $CMD = "COMMANDE A EXECUTER" ;
my $ssh2 = Net::SSH2->new();
print "Connexion au serveur $HOST :" ;
$ssh2->connect($HOST) or die "Unable to connect to $HOST, $! $@" ;
$ssh2->auth_password( $LOGIN , $PWD ) or die "Unable to login $!" ;
$ssh2->debug(0);
print " OK\n" ;
$CMD =~ s/;/ 2>\&1;/g ;
# Execution de $CMD
my $channel = $ssh2->channel();
$channel->blocking(1);
$channel->exec( $CMD );
my $result = "" ;
while( $channel->read( my $buffer , 4096 ) ) {
$result .= $buffer ;
}
print "<STDOUT>\n" ;
print "$result \n" ;
print "<fin STDOUT>\n" ;
$channel->close;
$ssh2->disconnect();
print "SSH OK\n" ;
}
Cordialement.
Fxta
