Partage
  • Partager sur Facebook
  • Partager sur Twitter

Vérification - Script Bash - SNMP

SNMP - Bash

Sujet résolu
    25 octobre 2021 à 12:27:41

    Bonjour à tous,

     Contexte :

    Au sein de mon entreprise, je veux essayer de configurer du SNMPv3 sur tous les commutateurs de l’entreprise. Dans un premier temps, j’essaie avec un script bash -> de me connecter sur les commutateurs, faire la commande snmp-server host 1.1.1.1 version ? et voir si le SNMPv3 est disponible. Par la suite, je transmets dans un fichier la réponse du commut et je filtre si je retrouve bien le SNMPV3, pour l'envoyer par mail.

    Objectifs :

    Voir si tous les commutateurs Cisco, peuvent faire du SNMPv3 dans un script bash.

    Problème :

    Avec un simple commutateur, j’arrive bien à récupérer une réponse : OK, mais avec plusieurs /!\ Erreurs

    Voici mon script :

    #!/bin/bash
    
    
    ##########################################
    ###       Connexion en mode SSH        ###
    ##########################################
    
    password=XXXXXXXX
    
    hosts=$(grep -i XXXXXX /etc/hosts | awk '{print $1}')
    
    for routeur in $hosts;
    do
    
    sed -i "/$routeur/d" /root/.ssh/known_hosts
    
    
    
    expect > /home/switch_switch.txt << EOF
    #expect << EOF
                                    spawn -noecho ssh -q -o StrictHostKeyChecking=no admin@$hosts
                                    expect "Password:"
                                    send "$password\r"
                                    expect "#"
                                    send "conf t\r"
                                    expect "#"
                                    send "snmp-server host 1.1.1.1 version ?\r"
                                    expect "#"
                                    send "exit"
                                    expect "#"
                                    send "exit"
    EOF
    
    version=$(cat /home/switch_switch.txt | grep "SNMPv3")
    echo "$version" >> switch_switch.txt
    
    
    if [[ $version =~ "SNMPv3" ]];then
            echo "$hosts : OK"
            echo "$HOST" >> /tmp/test.txt
    #       rm /tmp/XXXX.txt
    
    else
           echo "$hosts : NOK"
           echo "$HOST" >> /tmp/test2.txt
    #      rm /tmp/XXXXX.txt
    fi
    
    done
    #EOF
    

    Avez-vous des idées ? 

    Merci par avance. 

    -
    Edité par Sarrah-Web 25 octobre 2021 à 12:55:53

    • Partager sur Facebook
    • Partager sur Twitter
      25 octobre 2021 à 18:50:40

      ce sont quoi les erreurs retournées ?
      • Partager sur Facebook
      • Partager sur Twitter
        26 octobre 2021 à 0:28:42

        Bonsoir,

        Dans la boucle, ta commande SSH appelle $hosts alors qu'elle devrait appeler $routeur en toute logique.

        Tu récris switch_switch.txt à chaque tour de boucle (en redirigeant stdin avec >).

        Des choses sont maladroites dans le script comme pipe une sortie de cat vers grep (autant grep directement) et pipe une sortie de grep vers awk (autant utiliser awk directement), et tu peux les combiner plus simplement sans stocker le résultat du traitement de ton fichier dans une variable:

        while read -a line; do # Split de la ligne dans une variable de type tableau nommée «line» avec $IFS comme séparateur
             echo "${line[0]}" # Affiche uniquement le premier champs de la ligne
        done < <(grep foo file)
        • Partager sur Facebook
        • Partager sur Twitter
          26 octobre 2021 à 12:36:33

          Merci messieurs pour votre aide, :)

          Après plusieurs heures, j'ai enfin réussi, voici le résultat : 

          #!/bin/bash
          
          
          ##########################################
          ###       Connexion en mode SSH        ###
          ##########################################
          
          password=XXXXX
          
          hosts=$(grep -i XXX /etc/hosts | awk '{print $2}')
          #hosts=$(awk '/XXXXXXX/{print $2}' /etc/hosts)
          
          for routeur in $hosts;
          do
          
          echo "Connexion à : $routeur"
          
          sed -i "/$routeur/d" /root/.ssh/known_hosts
          
          
          
          expect >> /home/XXXXX/$routeur.txt << EOF
          #expect << EOF
                                          spawn -noecho ssh -q -o StrictHostKeyChecking=no admin@$routeur
          
                                          expect -exact "Password: "
                                          send "$password\r"
                                          expect "#"
                                          send "conf t\r"
                                          expect "#"
                                          send "snmp-server host 1.1.1.1 version ?\r"
                                          expect "#"
                                          send "exit\r"
                                          expect "#"
                                          send "exit\r"
                                          expect "#"
                                          send "exit\r"
                                          expect "#"
          
          EOF
          
          version=$(cat /home/XXXXX/$routeur.txt | grep "SNMPv3")
          
          echo "$version" >> resultat.txt
          
          #mail2=$"XXXXXX"
          
          ############################################
          ###       SEND PAR MAIL RESULTATS        ###
          ############################################
          
          if [[ $version =~ "SNMPv3" ]];then
          #       echo -e "Bonjour à tous,\nVoici les équipements compatibles à SNMPv3 : \n \n $routeur : OK"
                  echo "$routeur : OK" >> /home/XXXXXXXX/all.txt
          #       rm /home/XXXXXXXX/all.txt
          
          else
          #       echo -e "Bonjour à tous,\nVoici les équipements compatibles à SNMPv3 : \n \n $routeur : NON OK"
                  echo "$routeur : NON OK" >> /home/XXXXX/all.txt
          
          #       rm /home/XXXX/all.txt
          fi
          
          
          done
          #EOF
          
          #echo "Bonjour à tous,\nVoici les équipements compatibles à SNMPv3 : \n \n" | mail -s $mail2 < /home/XXXXXX/all.txt
          ( echo -e "Bonjour à tous,\nVoici les équipements compatibles à SNMPv3 : \n \n"; cat /home/XXXXXX/all.txt ) | mail -s'Vérification - SNMPv - Tests' $mail2
          
          

          Je voudrais savoir, si un commut est DOWN, lors de l'exécution du script il attend, je suis obligé de faire un CTRL + C pour qu'il passe au suivant : Est-il possible de mettre un timeout ? Où ? 

          Je vous remercie bcp, vous pouvez fermer le ticket. 

          • Partager sur Facebook
          • Partager sur Twitter
            26 octobre 2021 à 14:01:16

            C'est la commande SSH qui bloque?

            Tu peux vérifier avant que l'hôte est disponible (avec un ping par exemple):

            while read -a routeur; do
                if ping -c 2 "$routeur[1]" &>/dev/null; then
                    # SCRIPT EXPECT
                fi
            done < <(grep -i XXX /etc/hosts)

            Sinon, le langage expect permet des timeout, mais je ne sais pas comment l'implémenter dans ton script.

            EDIT: Et bien sûr, OpenSSH à une option pour le timeout, tu peux la passer à la commande avec le flag -oConnectTimeout=10 ou en modifiant le fichier /etc/ssh/ssh_config. (cf. man ssh).

            EDIT2:

            Je vous remercie bcp, vous pouvez fermer le ticket.

            On est pas un service technique ^^ C'est un forum d'entreaide. C'est à toi de clore ton sujet en le passant en résolu.

            -
            Edité par KoaTao 26 octobre 2021 à 14:17:34

            • Partager sur Facebook
            • Partager sur Twitter

            Vérification - Script Bash - SNMP

            × 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