[Perl]Net::SSH2 Verifier la connexion

Fermé
fxtaa Messages postés 1050 Date d'inscription mardi 20 octobre 2009 Statut Membre Dernière intervention 2 avril 2015 - 4 mai 2010 à 15:14
 Mr_Djez - 11 sept. 2012 à 10:40
Bonjour,

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

A voir également:

2 réponses

fxtaa Messages postés 1050 Date d'inscription mardi 20 octobre 2009 Statut Membre Dernière intervention 2 avril 2015 74
4 mai 2010 à 16:52
Up ^^
0
Salut;

je pense que depuis le temps tu a du trouver... mais:

tu pourrai mettre le "$ssh2->connect($HOST)" dans une condition:

if ( $ssh2->connect($HOST) ) {
.
.
.
}
else {
.
.
.
}

et même aller plus loin ;) :

if ( $ssh2->connect($HOST) ) {
print q(Ok\tconnect\n);
if ( $ssh2->auth_password( $LOGIN , $PWD ) ) {
print q(Ok\tauth_passwordt\n);
.
.
}
else {
print q(Fail\tauth_password\n);
.
.
}
.
.

}
else {
print q(Fail\tconnect\n);
.
.
}
0