Partage
  • Partager sur Facebook
  • Partager sur Twitter

Script PowerhShell - Backup

Script Cisco

    2 octobre 2020 à 12:21:00

    Bonjour, 

    Je suis bloqué avec du Powerhell, mon objectif étant de faire plusieurs Backup à partir d'un Script PowerShell. Avec la commande send "wr"

    Plusieurs, Switch = Boucle 

    Ping de l'équipement ->  Connexion à l'équipement ->  send 'wr'

    Voici mon code : 

    PS: si vous avez des solutions basic merci d'avance, 

    Cordialement, 

    #!/bin/sh
    
    password=@xxxxxxxx
    min=1
    max=99999999
    number1=$[($RANDOM % ($[$max - $min] + 1)) + $min]
    number2=$[($RANDOM % ($[$max - $min] + 1)) + $min]
    
    fichier=/tmp/eigrp_expect$number1$number2.txt
    
    expect << EOF
    
                                    spawn -noecho ssh -q -o StrictHostKeyChecking=no admin@$XXXXXXX
                                    expect "Password:"
                                    send "$password\r"
                                    expect "#"
                                    send "wr\r"
                                    expect "#"
                                    send "exit"
    EOF
    
    if grep -q "$2" $fichier ; then
            echo "OK: wr pour la sauvegarde" && rm $fichier && exit 0
    else
            echo "Critical: backup failed " && rm $fichier && exit 2
    fi
    
    while ( $1 )
    {
    send "cat /etc/hosts | egrep 'xxxxx|xxxx|xxx|xxxxx|xxxxx|xxxxxx"
    }
    
    end



    -
    Edité par Kepass 2 octobre 2020 à 15:09:02

    • Partager sur Facebook
    • Partager sur Twitter
      2 octobre 2020 à 16:05:54

      bloquer où ? messages d'erreur ? as-tu regardé l'aide des commandes en question (ou qui te posent problèmes) ?

      Est-ce que cette page du support Cisco t'aide ? https://www.cisco.com/c/en/us/support/docs/security/email-security-appliance/118372-technote-esa-00.html 

      • Partager sur Facebook
      • Partager sur Twitter
        2 octobre 2020 à 22:19:26

        C'est bon, après plusieurs heures pour comprendre comment amélioré mon Script j'ai enfin réussis à le faire sur UN commutateur, 

        Maintenant que mon script marche juste pour un, mon objectif est de le faire sur plusieurs commutateur = Boucle

        Si tu peux juste m'aider à réalisé cette boucle, si possible ? 

        Merci d'avance,

        #!/bin/sh
         
        password=@xxxxxxxx
        
        expect << EOF
         
                                        spawn -noecho ssh -q -o StrictHostKeyChecking=no admin@10.XX.XXX.XXXX
                                        expect "Password:"
                                        send "$password\r"
                                        expect "#"
                                        send "wr\r"
                                        expect "#"
                                        send "exit"
        EOF
         
        ____
        Jusque là, j'arrive à faire un wr sur un commutateur 
        Mon objetif et de faire le même mais sur plusieurs commutateur = Une boucle
         
        while ( ?? )
        {
        ___
        Voici ma commande qui me permet de retrouvé toute les IP des différents commutateurs pour faire leurs sauvegarde.
        
        send "cat /etc/hosts | egrep 'xxxxx|xxxx|xxx|xxxxx|xxxxx|xxxxxx | ask {print^1}"
        }
         
        end

        Cdt, 



        • Partager sur Facebook
        • Partager sur Twitter
          2 octobre 2020 à 23:50:45

          Bonjour,

          Ce n'est pas un script PowerShell que tu as posté mais un script sh (bourne shell) d'où le shebang (#!/bin/sh).

          Donc forcément ta boucle while écrite en Powershell doit faire grincer des dents le shell. :)

          while command-list1
          do command-list2
          done



          • Partager sur Facebook
          • Partager sur Twitter
            3 octobre 2020 à 10:47:24

            D'accord, excusez moi pour cette petite erreur de langage :D 

            Mais du coup, le while en Powershell ou sh c'est la même chose ? 

            Car je ne vois pas la différences en me renseignant. 

            • Partager sur Facebook
            • Partager sur Twitter
              3 octobre 2020 à 12:10:57

              Non,

              sh:

              KoaTao a écrit:

              while command-list1
              do command-list2
              done

              Powershell:

              while (<condition>){<statement list>}

              Ce n'est pas la même syntaxe. Par contre c'est une structure classique d'algorithmique (boucle tant que).

              -
              Edité par KoaTao 3 octobre 2020 à 12:11:20

              • Partager sur Facebook
              • Partager sur Twitter
                3 octobre 2020 à 12:59:38

                Du coup dans ma boucle while et do, je passe ma commande : ?

                cat /etc/hosts | egrep 'SWci8XX|swxx|swxxx|swxxxxx|swxxxxx|swxxxxxx | ask {print^1}

                Qui me permet de récupéré les ip des différents commutateurs ? 

                EDIT : 

                awk '/sw76|sw67|swtic37|switch48|switch18|switch/{print $1}' /etc/hosts | while read ip; do commande-backup "$ip"; done

                Vous en pensez quoi ?

                -
                Edité par Kepass 3 octobre 2020 à 18:56:50

                • Partager sur Facebook
                • Partager sur Twitter
                  4 octobre 2020 à 19:06:02

                  Oui comme ça c'est bien.

                  Pour aller un peu plus loin, on peut imaginer stocker la liste des noms d'hôtes dans un fichier et générer le motif de recherche pour awk «dynamiquement». Ça rendra ton script un peu plus long, mais plus simple à réutiliser et surtout, ajouter ou supprimer des noms d'hôtes sera plus simple.

                  Exemple de fichier contenant la liste

                  sw76
                  sw67
                  switch37
                  switch18
                  #!/usr/bin/env sh
                  
                  function backup {
                      # commande pour backup
                  }
                  
                  pattern=""
                  while read -r hostname; do
                      # On test si $hostname est vide ou non (permet d'éliminer des lignes vides qui «casseraient» le motif)
                      test -n "$hostname" && pattern="$pattern|$hostname"
                  done < "$1"
                  # On enlève le caractère "|" en trop au début
                  pattern=$(echo "$pattern" | cut -c 2-)
                  
                  awk -v pattern="$pattern" '$0 ~ pattern { print $1 }' /etc/hosts | while read ip; do backup "$ip"; done


                  Tu lances le script en passant comme argument le fichier contenant la liste des machines pour lesquelles une sauvegarde doit être fait:

                  ./script.sh list.txt

                  -
                  Edité par KoaTao 5 octobre 2020 à 9:39:39

                  • Partager sur Facebook
                  • Partager sur Twitter
                    5 octobre 2020 à 8:49:40

                    ça ne marche pas, je ne comprends pas pourquoi :( 

                    #!/bin/sh
                    
                    password=XXX
                    
                    
                    expect << EOF
                    
                                                    spawn -noecho ssh -q -o StrictHostKeyChecking=no admin@10.254.XX.XX
                                                    expect "Password:"
                                                    send "$password\r"
                                                    expect "#"
                                                    send "wr\r"
                                                    expect "#"
                                                    send "exit"
                    EOF
                    
                    
                    awk '/swdsg22/{print $1}' /etc/hosts | while read ip; do "$ip";
                    done
                    

                    Résultat : 

                    Password:

                    SW8X-012SG22#wr

                    Building configuration...

                    [OK]

                    Mais ça ne fait pas une boucle sur l'autre switch.
                    Help si possible :)

                    -
                    Edité par Kepass 5 octobre 2020 à 8:57:10

                    • Partager sur Facebook
                    • Partager sur Twitter
                      5 octobre 2020 à 9:48:30

                      N4mek a écrit:

                      ça ne marche pas, je ne comprends pas pourquoi :(

                      N4mek a écrit:

                      awk '/swdsg22/{print $1}' /etc/hosts
                      

                      Exécute cette commande dans un terminal. ça ne te ressortira que les adresses IP des lignes contenant la chaîne de caractère «swdsg22» dans le fichier /etc/hosts.

                      Ta structure while read ip; do <commandes>; done fait autant de tour de boucle que de résultat sortie par AWK.

                      De même:

                      N4mek a écrit:

                      while read ip; do "$ip";
                      done
                      

                      Tu va avoir une erreur car ici «$ip» sera interprété comme une commande.

                      Et ta connexion au switch se fait avant la boucle dans le script ici de toute manière. Rien ne se passe pour l'instant dans ta boucle.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        5 octobre 2020 à 9:52:52

                        awk '/swdsg22/{print $1}' /etc/hosts

                        C'est l'objectif de récupéré l'adresse Ip dans le fichier hosts cela permet de me connecté dessus à partir de l'adresse ip de la machine. 

                        while read ip; do "$ip";
                        done

                        Mon but a été de récupéré l'adresse ip dans le fichier "hosts" et de faire une boucle dessus, à partir de l'ip que j'ai récupéré 

                        Peut-être que je me mélange tout, :/

                        • Partager sur Facebook
                        • Partager sur Twitter
                          5 octobre 2020 à 12:29:21

                          À mon avis, oui tu mélanges tout.

                          J'ai bien compris que tu chercher à faire tes propres résolutions de noms d'hôtes en adresse IP (probablement inutile à mon avis).

                          Mais c'est pas le problème ici. La structure de la boucle est:

                          while read line; do
                             # Faire quelques choses ici
                          done < /etc/hosts

                          Tu as autant de tour de boucle que de ligne dans le fichier hosts.

                          Ici, l'entrée standard n'est pas le fichier /etc/hosts mais le retour de ton petit script awk (qui retourne probablement qu'une seule ligne).

                          Dans ta boucle tu ne fais rien, tu fais juste:

                          "$ip"

                          Le contenu de la variable sera interprété par le shell comme une commande (qui n'existe pas).

                          Ce que tu doit faire dans ta boucle, c'est ton ensemble de commande avec expect en utilisant l'adresse IP lorsque tu te connectes avec SSH*.

                          Bref, écrit ton programme pour une machine, lorsque ça marche, tu mets ce programme dans une boucle.

                          C'est un exercice qui t'est demandé ? Tu n'as pas de support pour le réaliser ? Ou de personne pour te guider ?

                          * Et c'est là où je ne comprends pas pourquoi tu n'utilises pas le noms d'hôtes directement car par défaut (il faut vérifier la configuraton de nss (/etc/nsswitch.conf), c'est le fichier /etc/hosts qui est utilisé en premier, donc la résolution sera fait automatiquement.

                          -
                          Edité par KoaTao 5 octobre 2020 à 12:32:07

                          • Partager sur Facebook
                          • Partager sur Twitter
                            6 octobre 2020 à 22:43:19

                            ReBonjour, 
                            désolé du délai. 
                            C'est mon tuteur qui m'avais demandé de faire ça, car je suis en alternance en Réseau en licence mais je n'avais jamais fais de Script avant. Alors mon tuteur ma demandé de faire un script comme celui là. 
                            Mais je galère toujours avec la boucle. Alors j'abandonne,... je verrais plus tard.. 
                            Il veux un script tout simple. Qui sauvegarde plusieurs commut quoi. 
                            Voici en image le principe :  
                            Le résultat normalement avec plusieurs commut mais là juste un seul marche :  

                            Cdt, 

                            -
                            Edité par Kepass 6 octobre 2020 à 22:43:43

                            • Partager sur Facebook
                            • Partager sur Twitter
                              7 octobre 2020 à 8:34:06

                              Bonjour,

                              awk '/switch1|switch2/{print $1}' /etc/hosts | while read ip; do
                              expect << EOF
                                     spawn ssh admin@$ip
                                     # le reste
                              EOF
                              done

                              On affecte une nouvelle valeur à la variable IP à chaque tour de boucle. Donc il faut réutiliser cette variable dans ta boucle.

                              Mais, tu n'as pas besoin de faire la résolution d'adresse IP toi-même. SSH devrait savoir résoudre en adresse IP les noms d'hôtes présents dans le fichier /etc/hosts (c'est un peu le but du fichier):

                              man 5 hosts
                              man 5 nsswitch.conf


                              Il ne faut pas hésiter à demander de l'aide à ton tuteur je pense. Il ne faut pas rester bloquer.

                              • Partager sur Facebook
                              • Partager sur Twitter
                                8 octobre 2020 à 12:04:24

                                ReBonjour,

                                j'ai réussi à enfin le Script grâce à toi, 

                                Je vais me donné du travail en plus je voulais juste un dernier renseignement : 

                                Serait-il possible de faire un envoie de mail après une sauvegarde, : 
                                SW.......#wr
                                Building configuration... -> Si ça m'affiche les deux lignes [Build.., [OK] alors je peux envoyé un mail de confirmation 
                                [OK]


                                Mail du genre : Le commutateur SW... a été sauvegarder avec succès. 

                                C'est possible de faire ça ? 

                                Voici mon Script :) :

                                #!/bin/sh
                                
                                password0=XXXXX
                                password1=YYYYYY
                                
                                #### PASSWORD : XXXXX #####
                                
                                
                                
                                awk '/XXXX|XXXX|XX|XX|XXXXXX|XX|XX/{print $1}' /etc/hosts | while read ip; do
                                expect << EOF
                                
                                                                spawn -noecho ssh -q -o StrictHostKeyChecking=no xxx@$ip
                                                                expect "Password:"
                                                                send "$password0\r"
                                                                expect "#"
                                                                send "wr\r"
                                                                expect "#"
                                                                send "exit"
                                EOF
                                done
                                
                                #### PASSWORD : YYYY ####
                                
                                awk '/yyyy|yyyy|yy|yyy/{print $1}' /etc/hosts | while read i; do
                                expect << EOF
                                
                                                                spawn -noecho ssh -q -o StrictHostKeyChecking=no yyyy@$i
                                                                expect "Password:"
                                                                send "$password1\r"
                                                                expect "#"
                                                                send "wr\r"
                                                                expect "#"
                                                                send "exit"
                                EOF
                                done
                                
                                #### CONNEXION TELNET POUR UN ROUTEUR####
                                
                                
                                expect << EOF
                                
                                                                spawn  telnet -l admin XX.XX.XXX.XXX
                                                                expect "Username:"
                                                                send "admin\r"
                                                                expect "Password:"
                                                                send "$password0\r"
                                                                expect "#"
                                                                send "wr\r"
                                                                expect "#"
                                                                send "exit"
                                EOF
                                done



                                • Partager sur Facebook
                                • Partager sur Twitter
                                  9 octobre 2020 à 19:28:56

                                  Oui, c'est probablement possible.

                                  Je ne connais pas du tout expect, mais il est possible d'inclure des structures conditionnelles, si tu arrives à retourner une valeur différente selon si tu reçois tel ou tel message. Tu pourras alors dans ton script shell l'utiliser pour t'envoyer le bon mail.

                                  Pour ce qui est de l'envoi de mail, demande à ton tuteur, vu que ça peut être spécifique à la configuration de la machine et du serveur mail.

                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Script PowerhShell - Backup

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                  • Editeur
                                  • Markdown