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

Programmation et administration système Perl Discussion :

Sauvegarde Configuration Switch Nortel


Sujet :

Programmation et administration système Perl

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2012
    Messages : 41
    Points : 12
    Points
    12
    Par défaut Sauvegarde Configuration Switch Nortel
    Bonjour à tous,

    Je me suis amusé à écrire un script permettant d’effectuer une sauvegarde TFTP de la config d'un switch NORTEL.Cela marche bien , j'ai bien mon fichier config du switch sauvegarder sur mon pc ;-)

    Mais j'aimerai faire évoluer mon script afin qu'il prenne durant le lancement du script les arguments $host(ip du switch) & $name(nom du fichier de sauvegarde) , là je bloque un peu concernant à la ligne 26 de mon programme. je ne sais pas comment lui dire/écrire afin qu'il prenne mon argument $name dans la ligne de commande: copy config tftp filename $name adress 192.168.32.199.

    Merci d'avance pour votre aide ;-)


    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
    36
    37
    38
     
    #!/usr/bin/perl
     
    use Net::Telnet;
     
    $prompt ='/.*[\$#:>\]\%] *$/';  #prend en compte n'importe caractéres du prompt
    $host =$ARGV[0];
    $name =$ARGV[1];
     
     
    $telnet = new Net::Telnet (Timeout => 20, Errmode=>'return');
     
    if ($telnet->open($host))
        {
        sleep 1;
        $telnet->waitfor("Enter Ctrl-Y to begin.");
        $telnet->print("\031") or die "=> Echec de l'envoi de Ctrl+Y \n=> ".$telnet->errmsg."";
        sleep 1;
        $telnet->waitfor("IP Configuration/Setup...");
        $telnet->print("c") or die "=> Echec de l'envoi de Maj+C \n=> ".$telnet->errmsg."";
        sleep 1;
        $telnet->waitfor("$prompt");
        $telnet->print("en\n") or die "=> Echec de l'envoi enable \n=> ".$telnet->errmsg."";
        sleep 1;
        $telnet->waitfor("$prompt");
        $telnet->print("copy  config tftp filename $name address 192.168.32.199\n") or die "=> Echec de l'envoi copy config \n=> ".$telnet->errmsg."";
        sleep 1;
        #@result= $telnet->get();
        #$telnet->waitfor("$prompt");
        #print @result;
     
        $telnet->close;
        }
     
    else
        {
          print("Impossible d'établir une session\n");
        }

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 87
    Points : 92
    Points
    92
    Par défaut
    Salut,

    un truc tout bête, t'as essayé ca?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $telnet->print("copy  config tftp filename ".$name." address 192.168.32.199\n") or die "=> Echec de l'envoi copy config \n=> ".$telnet->errmsg."";
    je m'en sors comme ça avec Expect moi

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Août 2008
    Messages : 505
    Points : 712
    Points
    712
    Par défaut
    Honnêtement, je ne vois pas pourquoi ça ne fonctionne pas. Entre guillemet, une variable est instanciee. Il faudrait être sur que c'est bien ça le problème.

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Mustaal, peux-tu poster la ligne de commande que tu lances ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2012
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Bonjour à tous,

    Désolé pour le retard de ma réponse ;-)
    Cela fonctionne nickle je n'ai rien dû changer au programme, la commande copy passe bien!

    Mon script tourne nickel, je parcours un fichier ligne/ligne (dans chaque lignes on a une ip et un nom) que le script récupère et l'associe à $HOST et $NAME

    Mais j'ai un petit souci quand même ;-)
    Sur certain de mes switchs je dois introduire un nom d'utilisateur et un mot de passe. Et là je n'arrive pas! Mon script et le suivant:

    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
    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
     
    #!/usr/bin/perl
    use Net::Telnet;
     
    ########### DATE & TIME##############################################################################################
    ($sec,$min,$heure,$jour,$mois,$annee)= localtime time;
    $annee+=1900;
    $mois+=1;
     
    ###########OPENING FILE#############################################################################################
    unless (open ($file, "switch.txt")) { die ("cannot open file Switch.txt\n"); } #fichier qui contient les adresses et noms des switchs
    unless (open ($logfile, ">>Log.txt")) { die ("cannot open file Log.txt\n"); } #fichier qui contient les sessions telnet échouées
     
     
    #############Variables################################################################################################
    $PROMPT='/.*[\$#:>\]\%] *$/';  #prend en compte n'importe caractéres du prompt
    $HOST;
    $NAME;
    $TFTPSERVER='10.5.1.53';
    $TELNET = new Net::Telnet (Timeout => 20, Errmode=>'return');
     
     
    while ($line = <$file>)
    	{
    	($HOST,  $NAME) = split(/;/, $line);
     
    		if ($TELNET->open($HOST))
    			{
    				sleep 1;
    				$TELNET->waitfor("Enter Ctrl-Y to begin.");
    				$TELNET->print("\031") or die "=> cannot send Ctrl+Y \n=> ".$TELNET->errmsg."";
    				sleep 1;
    				$TELNET->waitfor("Enter Username: ");
    				$TELNET->print("Dupont\n") or die "=> cannot send Ctrl+Y \n=> ".$TELNET->errmsg."";
    				sleep 1;
    				$TELNET->waitfor("Enter Password: ");
    				$TELNET->print("dupont\n") or die "=> cannot send Ctrl+Y \n=> ".$TELNET->errmsg."";
    				sleep 1;
    				$TELNET->waitfor("IP Configuration/Setup...");
    				$TELNET->print("c") or die "=> cannot send C \n=> ".$TELNET->errmsg."";
    				sleep 1;
    				$TELNET->waitfor("$prompt");
    				$TELNET->print("en\n") or die "=> cannot send enable \n=> ".$TELNET->errmsg."";
    				sleep 1;
    				$TELNET->waitfor("$prompt");
    				$TELNET->print("copy config tftp filename $NAME address $TFTPSERVER\n") or die "=> Echec de l'envoi copy config \n=> ".$TELNET->errmsg."";
    				sleep 1;
    			}
     
    		else
    			{
    		print $logfile ("cannot open session telnet at $jour/$mois/$annee $heure:$min:$sec for $HOST $NAME");
    			}
     
    	}
     
    print $logfile("\n--------------------------------------- $jour/$mois/$annee $heure:$min:$sec ---------------------------------------\n");
    close ($file);  
    close ($logfile);
     
     
    #<>; #Garde la fenêtre ouverte après la fin de l'exécution du script
    Merci encore pour votre précieuse aide!

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Ta question n'est pas claire : où vas-tu chercher les noms d'utilisateur et les mots de passe ?
    Par ailleurs, ton script semble déjà émettre un login et un mot de passe (Dupont et dupont)... du coup, je ne comprends pas si le script que tu publies est celui qui fonctionne nickle et ce que tu attends vraiment ...
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2012
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Ta question n'est pas claire : où vas-tu chercher les noms d'utilisateur et les mots de passe ?
    Par ailleurs, ton script semble déjà émettre un login et un mot de passe (Dupont et dupont)... du coup, je ne comprends pas si le script que tu publies est celui qui fonctionne nickle et ce que tu attends vraiment ...
    Pour être clair:
    j'ai dans le fichier switch.txt à chaque lignes une adresse ip et un nom:
    ex: 10.0.0.1;France_config
    .
    .
    .
    10.2.0.5;Canada_config

    De ce fichier j'extrais ligne/ligne:
    1° l' ip adresse du switch que j'attribu à $HOST qui servira pour mon telnet
    2° le nom du fichier de sauvegarde que j'attribu à $NAME
    Ainsi je peux exécuter un telnet et faire une sauvegarde de la config de toutes les lignes de mon fichier switch.txt, Ceci fonctionne très bien ;-) T

    Mais sur certains de mes switchs, je dois introduire un user et un mot de passe. D'où dans mon ma dernière VERSION DU SCRIPT tu peux lire Dupont et dupont (qui sera un mot de passe unique pour tous les switchs).
    Mais cela bloque quand j'envoie user et le password.

    merci d'avance

  8. #8
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Comment cela bloque ? Les login/mot de passe sont incorrects, ou le script n'envoie rien ?
    Si le script n'envoie rien, c'est probablement que le texte du waitfor ne correspond pas à celui qu'envoie le modem.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2012
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Comment cela bloque ? Les login/mot de passe sont incorrects, ou le script n'envoie rien ?
    Si le script n'envoie rien, c'est probablement que le texte du waitfor ne correspond pas à celui qu'envoie le modem.
    Le login/password sont corrects mais je pense que tu as raison le texte du waitfor ne correspond peut-être pas! Que devrai-je mettre? Un aperçu de la fenêtre d'invite:
    --------------------------------------------------------------------------------------------------
    NetLogin
    Username: [ ]
    Password: [ ***************** ]


    Enter Username:



    Enter text, press <Return> or <Enter> when complete.
    -------------------------------------------------------------------------------------------------------

    Merci d'avance!

  10. #10
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    As-tu essayé en utilisant la méthode login ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $TELNET->login("Dupont", "dupont");
    Sinon, tu peux essayer en utilisant une expression régulière relativement gourmande avec waitfor (pour commencer, puis de plus en plus précise) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $TELNET->waitfor(/.*:.*/i);
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  11. #11
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2012
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    As-tu essayé en utilisant la méthode login ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $TELNET->login("Dupont", "dupont");
    Sinon, tu peux essayer en utilisant une expression régulière relativement gourmande avec waitfor (pour commencer, puis de plus en plus précise) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $TELNET->waitfor(/.*:.*/i);
    Je testerai de la demain matin et je te tiendrai au courant, merci pour ton aide ;-)

    L'homme sage apprend de ses erreurs, - L'homme plus sage apprend des erreurs des autres."

  12. #12
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 87
    Points : 92
    Points
    92
    Par défaut
    Je n'utilise pas Net::Telnet, donc je ne pourrai t'aider dessus.
    par contre ca ressemble quand même beaucoup à Expect

    y'aurait-il une option qui te permet d'avoir un debug à un niveau élevé?
    ca existe sur Expect, tu vois ce qui est envoyé, ce qui est reçu, et si ca match tes regexp. Ca aide beaucoup pour voir où ton script bloque

  13. #13
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2012
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Salut à tous,

    j'ai essayé les deux solutions le login() et waitfor(/.*:.*/i) mais cela ne fonctionne toujours pas, grrrrr

    Je suis sur que je ne suis pas loin du but!
    Voici la partie de mon code qui me pose problème:

    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
    ($HOST,  $NAME) = split(/;/, $line);
        print ("$HOST et $NAME\n");
        
        if ($TELNET->open($HOST))
        {
        sleep 1;
        $TELNET->waitfor("Enter Ctrl-Y to begin.");
        $TELNET->print("\031") or die "=> cannot send Ctrl+Y \n=> ".$TELNET->errmsg."";
        sleep 1;
        $TELNET->waitfor(/.*:.*/i);
        $TELNET->print ("dupont\n") or die "=> cannot send Username \n=> ".$TELNET->errmsg."";
        sleep 1;
        $TELNET->waitfor(/.*:.*/i);
        $TELNET->print ("motdepasse\n") or die "=> cannot send Password \n=> ".$TELNET->errmsg."";
        sleep 1;
        $TELNET->waitfor("IP Configuration/Setup...");
        $TELNET->print("c") or die "=> cannot send C \n=> ".$TELNET->errmsg."";
        sleep 1;
        $TELNET->waitfor("$prompt");
        $TELNET->print("enable\n") or die "=> cannot send enable \n=> ".$TELNET->errmsg."";
        sleep 1;
        $TELNET->waitfor("$prompt");
        $TELNET->print("copy config tftp filename $NAME address $TFTPSERVER\n") or die "=> Echec de l'envoi copy config \n=> ".$TELNET->errmsg."";
        sleep 1;
     
        $TELNET->close;
    Une idée les amis?

  14. #14
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2012
    Messages : 41
    Points : 12
    Points
    12
    Par défaut
    Bonjour à tous,

    Après quelques chipotages , je suis enfin arrivé à mon but!
    voici mon code (une partie):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $TELNET->waitfor("Enter Ctrl-Y to begin.");
    $TELNET->print("\031") or die "=> cannot send Ctrl+Y \n=> ".$TELNET->errmsg."";
    $TELNET->login("Dupont","mdp");
    $TELNET->waitfor("IP Configuration/Setup...");
    $TELNET->print("c") or die "=> cannot send C \n=> ".$TELNET->errmsg."";
    $TELNET->waitfor("$prompt");
    $TELNET->print("en\n") or die "=> cannot send enable \n=> ".$TELNET->errmsg."";
    $TELNET->waitfor("$prompt");
     $TELNET->print("copy config tftp filename $NAME address $TFTPSERVER\n") or die "=> Echec de l'envoi copy config \n=> ".$TELNET->errmsg."";
    Merci pour votre aide à tous!

Discussions similaires

  1. Réseau Telnet sauvegarde config switch Nortel
    Par Mustaal dans le forum Programmation et administration système
    Réponses: 7
    Dernier message: 14/02/2012, 14h58
  2. Automatisation sauvegardes de switch.
    Par Be Cool dans le forum VBScript
    Réponses: 1
    Dernier message: 10/02/2009, 15h48
  3. Configurer switch hp2524
    Par redman99 dans le forum Hardware
    Réponses: 1
    Dernier message: 06/05/2008, 13h18
  4. configuration switch ASUS
    Par sisina dans le forum Hardware
    Réponses: 1
    Dernier message: 06/03/2008, 07h46
  5. Configuration switch cisco
    Par Aristote dans le forum Développement
    Réponses: 2
    Dernier message: 04/05/2005, 08h52

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