IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Modules Perl Discussion :

module perl Net::SSH::Expect


Sujet :

Modules Perl

  1. #1
    Membre chevronn�

    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 37
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Par d�faut module perl Net::SSH::Expect
    La connection sur des p�riph�riques via SSH est un probl�me que j'ai constat� assez r�current, et assez probl�matique vis � vis de certains p�riph�riques cisco. Venant de trouver une solution � mon probl�me, je la poste en �sperant qu'elle pourra en aider certains :

    Donc pour tout ceux qui ont des probl�mes avec Net::SSH::Perl ou Perl::SSH2, voir m�me Net::Appliance::session, voici une piste :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    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
     
    #! /usr/bin/perl
    use Net::SSH::Expect;
     
            my $ssh = Net::SSH::Expect->new (
                host => "192.168.90.100", 
                password=> 'cisco', 
                user => 'admin', 
                raw_pty => 1
            );
     
            my $enable_passwd = "cisco";
     
            my $login_output = $ssh->login();
            $ssh->run_ssh() or die "SSH process couldn't start: $!";
     
            $ssh->send("enable");
            $ssh->waitfor('Password:\s*\z', 1) or die "prompt 'password' not found after 1 second";
            $ssh->send($enable_passwd);
     
            my $ls = $ssh->exec("show hosts");
            print($ls);
     
            # When running a command that causes a huge output,
            # lets get the output line by line:
            $ssh->send("show interfaces");   # using send() instead of exec()
            my $line;
            # returns the next line, removing it from the input stream:
            while ( defined ($line = $ssh->read_line()) ) {
                print $line . "\n";  
            }
     
            # closes the ssh connection
            $ssh->close();
    Je pr�cise que cela est tir� de la doc CPAN, et j'ai simple�ent r�duit le script au minimum pour mes besoins.

    Cependant, j'ai un dernier souci : avec ce script, l'execution de plusieurs commandes ne pose aucun probl�me (plus de soucis de channel), mais lors d'affichage de grande sortie (genre un r�sultat de commande de plusieurs 10 aines de lignes), je n'arrive pas passer outre le "--More--" de cisco. Donc au final, je n'arrive recuperer dans une variable que la pre�i�re page de l'affichage.

    Si quelqu'un a une piste ou une solution � ce probl�me...

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par d�faut
    as tu test� cette solution ?

  3. #3
    Membre chevronn�

    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 37
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Par d�faut
    Personnelement j'ai un probl�me avec le module Perl::SSH2. Malgr�s une installation correcte et sans encombre du module et des d�pendances, � chaque �x�cution d'un "new" il me dit qu'il ne trouve pas la m�thode "put" dans le fichier ssh2.pm...

    Malgr�s r�installation du module � nouveau sans erreur apparente, idem...

    Sinon je viens de me renseigner aupr�s de professionels cisco, et on m'a donn� une commande magique resolvant mon probl�me :

    avant la commande ayant une sortie trop longue :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    $ssh->exec(terminal length 0);
    et apr�s la commande, pour revenir a la normal :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    $ssh->exec(terminal length 24);
    Apr�s cette solution ne sera peut �tre pas viable en dehors de cisco, mais hors cisco le module Net::SSH:erl fonctionne bien chez moi...

    N�anmoins je te remercie pour ton lien car cela m'a donn� quelques id�es pour les autres fonctions que j'ai a r�aliser.

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par d�faut
    Essaye de tester le code que j'ai mis dans les sources avec ton cisco et dit moi s'il fonctionne ou non. Sinon merci pour tes pr�cisions, �a pourra aider du monde je pense.

  5. #5
    Membre chevronn�

    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 37
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Par d�faut
    J'ai teste la partie connection SSH de ton script, et cela me retourne exactement la m�me erreur que j'obtient d�s que je tente une connection via le module SSH2 :

    Net::SSH2 object version 0.30 does not match bootstrap parameter 0.3 at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/XSLoader.pm line 94.
    apres je suis sous CentOS et je me connecte sur un cisco, donc je ne peux pas tester le transfert de fichier tel qu'indique...

    ps : je viens de tilter que j'ai dit precedement que j'avais l'erreur de la methode "put" introuvable avec Net::SSH2, or cette erreur survient avec le module Net::Appliance::session. je tenais a rectifier.

    Donc pour le moment, seul solution que j'ai trouve pour la connection sur un cisco (tout modeles confondus meme catalyst) passe par l'utilisation du module Net::SSH::Expect.

    Si je parviens a trouver des solutions viables avec les autres modules je ne manquerais pas de vous en faire part.

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par d�faut
    Bon courage

  7. #7
    Membre chevronn�

    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 37
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Par d�faut
    merci !

    et petit ajout, un peu plus simple pour les commandes a longue sortie :

    au lieu de :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
     $ssh->send("show interfaces");   # using send() instead of exec()
            my $line;
            # returns the next line, removing it from the input stream:
            while ( defined ($line = $ssh->read_line()) ) {
                print $line . "\n";  
            }
    les lignes suivantes fonctionnent parfaitement, mais retourne un prompt a la fin (switch> sur un switch cisco par exemple) en plus du resultat de la commande:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
     my @output = $ssh->exec("show interfaces");
    print @output;
    � voir apr�s sur des cas particuliers...


    Edit : erreur de d�butant (1 mois de perl et cisco), le passage enable ne fonctionne pas avec les lignes suivantes :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    $ssh->send("enable");
            $ssh->waitfor('Password:\s*\z', 1) or die "prompt 'password' not found after 1 second";
            $ssh->send($enable_passwd);
    Cela semblait fonctionner, mais seulement car j'ai test� avec une commande (show interfaces) qui est aussi utilisable en mode Disable. Donc la connection et l'execution en mode disable est bonne, mais pour le moment je suis bloqu� au passage enable...

  8. #8
    Membre chevronn�

    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 37
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Par d�faut
    Probleme resolu pour le passage enable. Il semblerait que le probleme venait soit d'un delai trop court entre la connection et la tentative de passage enable, soit d'un caract�re faussant la premi�re ligne de commande... quoi qu'il en soit, j'ai tent� de repeter l'operation enable et il s'avere que cela fonctionne parfaitement.

    Code utilis� pour passer enable sur cisco :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    for(my $i=0;$i<2;$i++){
    	$ssh->send('enable');
    	$ssh->waitfor('Password:\s*\z', 1) or die "prompt 'password' not found after 1 second";
    	$ssh->send($enable_password);
    }
    c'est bourrin... mais ca marche...

  9. #9
    Membre chevronn�

    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 37
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Par d�faut
    Comme promis, je viens de trouver le pourquoi du comment du probl�me enable. Il s'agissait en fait de la m�thode "run_ssh()" qui ne doit s'utiliser que si on ne dispose pas d'identifiants pour la connection.

    Le code finale, fonctionnel et test� est donc celui-ci :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    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
     
    #! /usr/bin/perl
    use Net::SSH::Expect;
     
            my $ssh = Net::SSH::Expect->new (
                host => "192.168.90.100", 
                password=> 'cisco', 
                user => 'admin', 
                raw_pty => 1
            );
     
            my $enable_passwd = "cisco";
     
            my $login_output = $ssh->login();
     
            $ssh->send("enable");
            $ssh->waitfor('Password:\s*\z', 1) or die "prompt 'password' not found after 1 second";
            $ssh->send($enable_passwd);
     
            my $ls = $ssh->exec("show vlan");
            print($ls);
     
     
            #Première façon de récuperer une sortie longue:
            $ssh->send("show running-config");
            my $line;
            while ( defined ($line = $ssh->read_line()) ) {
                print $line . "\n";  
            }
     
            #Deuxième façon (mais on récupère aussi les prompt avec cette méthode):
            my @output = $ssh->exec("show running-config");
            print @output;
     
            $ssh->close();
    Pour les probl�mes de longeur de sortie sur le terminal (passage du --more-- sur les cisco), il suffit d'�x�cuter la commande suivante avant votre commande :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    $ssh->exec("terminal length 0");
    et celle ci apr�s votre commande afin de revenir dans l'�tat par d�faut :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    $ssh->exec("terminal length 24");

    D�sol� pour toutes ces modifications, mais avec cette derni�re version, le ssh marche parfaitement et on peut �x�cuter plusieurs commandes sans soucis. Je l'ai test� sur plusieurs type de switch cisco et plusieurs version d'IOS jusque la avec succ�s.

    En �sp�rant que cela puisse vous aider.

    Sinon merci pour les cours de formation et les tutoriels pour apprendre Perl : http://perl.developpez.com/cours/


    ps: pour la lisibilit� du topic ne serait-il pas mieux de supprimmer les messages entre le premier et le dernier ? je dis cela car ca ne me derange pas que mes messages intermediaires passent a la trappe si cela aide a la lisibilit�.

  10. #10
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par d�faut
    Souhaites tu que l'on rajoute ton code dans nos sources de la rubrique Perl. Si oui, Je te sugg�re de poster un message ici. En y pr�cisant le code et son but. Puis je le mettrais dans les sources.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [Net::SSH::Expect] Utilisation du module
    Par JLChelin dans le forum Modules
    R�ponses: 2
    Dernier message: 21/03/2013, 11h05
  2. Installation du module net:ssh:expect sous windows xp
    Par ngerbault dans le forum Modules
    R�ponses: 0
    Dernier message: 24/01/2012, 10h12
  3. Module Perl Net::Packet::Dump
    Par sarnov dans le forum Modules
    R�ponses: 2
    Dernier message: 28/01/2009, 12h06
  4. Perl - Net::SSH:Perl
    Par pratheep dans le forum Modules
    R�ponses: 3
    Dernier message: 24/11/2008, 20h09
  5. R�ponses: 6
    Dernier message: 04/11/2008, 09h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo