[Shell+EXPECT]Automatisation de commandeCISCO

Fermé
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 - 11 mars 2008 à 13:55
 ihssane - 9 juin 2010 à 14:17
Bonjour,

Voici Le script final, optimisé, testé et retesté, afin de pouvoir rentrer à partir d'un fichier commandes.txt des commandes CISCO sur un nombre d'équipements illimité, dont les IP sont précisés dans un fichier liste.txt.

Ce script comporte de nombreux éléments, comme l'intégration d'EXPECT dans du SHELL ou encore le contôle d'erreur par log en fonction de l'erreur généré par le script EXPECT.

Merci à jipicy pour m'avoir aidé à réaliser ce code.

#script.sh

echo "veuillez donner le mot de passe"
stty -echo
read password
stty echo

rm -f rapport_erreurs.log
cat liste.txt | while read routeur;
do

        if [ "$routeur" = "" ]
        then
             continue
        fi


        time -p expect > tmp_routeur.log 2>&1 << EOF
        spawn ssh admin@$routeur
        expect "Password:"
        send "$password\r"
        expect "#"

EOF
        COD_RET=$?


TEMPS=`grep 'real ' tmp_routeur.log | sed 's/real /§/' | cut -d'§' -f2 | cut -d' ' -f1 | cut -d'.' -f1`

        if [ $TEMPS -gt 15 ]
        then
                echo "Le routeur $routeur ne réponds pas !";
                echo "$routeur : connection timed out"  >> rapport_erreurs.log
                continue
        fi


        if [ "$COD_RET" != "0" ]
        then
                 #Erreur de connexion au routeur en SSH

                 expect > tmp_routeur.log 2>&1 << EOF
                 spawn telnet $routeur
                 send "admin\r"
                 expect "Password:"
                 send "$password\r"
                 expect "#"
EOF

                 COD_RET=$?

                 if [ "`grep 'Host name lookup failure' tmp_routeur.log`"  ]
                 then
                         echo "le routeur $routeur n'existe pas !"
                         echo "$routeur : does not exist"  >> rapport_erreurs.log
                         continue
                 elif [ "`grep 'Authentication failed' tmp_routeur.log`" ]
                 then
                         echo "Mot de passe erroné pour $routeur !"
                         echo "$routeur : wrong log-in/password" >> rapport_erreurs.log
                         continue
                 elif [ "`grep 'Connection refused' tmp_routeur.log`" ]
                 then
                         echo "Connexion à distance sur $routeur désactivé !"
                         echo "$routeur : vty connection disabled" >> rapport_erreurs.log
                         continue
                 elif [ "`grep 'No route to host' tmp_routeur.log`" ]
                 then
                         echo "Alias DNS $routeur existant mais IP invalide !"
                         echo "$routeur : No route to host" >> rapport_erreurs.log
                         continue
                 elif [ "`grep 'ProCurve' tmp_routeur.log`" ]
                 then
                         echo "routeur $routeur HP et non Cisco !"
                         echo "$routeur : non Cisco router (HP ProCurve)" >> rapport_erreurs.log
                         continue
                 elif [ "`grep 'Alcatel' tmp_routeur.log`" ]
                 then
                         echo "routeur $routeur Alcatel et non Cisco !"
                         echo "$routeur : non Cisco router (Alcatel)" >> rapport_erreurs.log
                         continue
                 elif [ "$COD_RET" != "0" ]
                 then
                         echo "Problème de connexion au routeur $routeur en Telnet !"
                         echo "$routeur : connection problem" >> rapport_erreurs.log
                         continue
                 fi
         fi

         cat commandes.txt | while read commande;

         do
                 expect >> tmp_routeur.log 2>&1 << EOF
                 send "$commande\r"
                 expect "#"
EOF
         done

         expect >> tmp_routeur.log 2>&1 << EOF
         send "end\r"
         expect "#"
         send "exit\r"
         expect "closed"
         exit
EOF

         rm -f tmp_routeur.log
done

1 réponse

Bonjour,

j'ai essayé d'utiliser votre code, mais malhaureusement j'ai cette erreur que j'arrive pas a résoudre :

spawn id exp0 not open
8 while executing

9 "send "sys\r""^M
10 send: spawn id exp0 not open
11 while executing

12 "send "management\r""



J'espère que j'aurai une réponse ASAP...

Merci
0