show interfaces status

Le script expect présenté ici permet de générer un fichier texte contenant le statut des interfaces d'un parc de switch Cisco.
Le Fichier généré pourra être facilement importé dans Excel.
Le script pourra facilement être placé dans une crontab.

Le script suivant permet de parcourir un ensemble de switch Cisco pour :

  1. effectuer la commande show interfaces status
  2. stocker le résultat dans un fichier texte
  3. ajouter devant chaque ligne du fichier texte de résultat le nom du switch

Pour fonctionner, le script utilise :

  1. un fichier de mot de passe –> variable : FICHIER_MDP
  2. un fichier de liste contenant les équipements réseaux –> variable : FICHIER_LISTE
  3. un fichier de résultat –> variable : FICHIER_RESULTAT

Fichier de mot de passe

Paramètres pour la confidentialité du mot de passe :

  • Exécution du script dans la “cron” de l'utilisateur root.
  • Les droits sur le fichier de mot de passe sont les suivants :

# chmod 000 mdp
# chown root:root mdp
# ls -l mdp
---------- 1 root root 9 29 mars  15:28 mdp

Fichier de liste des équipements

Le fichier de la variable : FICHIER_LISTE contient la liste des équipements à traiter. Il est simple et doit ressembler à celui présenté ci-dessous :

swicth57
swicth50
swicth46
swicth16 

Fichier de sortie (sortie formatée)

La sortie suivante a été extraite du fichier de la variable : FICHIER_RESULTAT. Elle a été volontairement tronquée par les caractères ”[…]” pour faciliter sa lecture. Nous constatons qu'il est maintenant facile de l'importer dans un fichier Excel.

La description des champs est la suivante :

Name        Port      Name               Status       Vlan       Duplex  Speed Type

# cat resultat.txt
[...]
swicth57    Fa0/15    srvedu-a           connected    729        a-full  a-100 10/100BaseTX
swicth57    Fa0/16    srvedt-0           connected    808        a-full  a-100 10/100BaseTX
[...]
swicth50    Gi0/2     srv00036           connected    trunk        full   1000 1000BaseX
swicth50    Gi0/3     srv00037           connected    trunk        full   1000 1000BaseX
[...]
swicth46    Fa0/3     srvsac6-a          notconnect   729          auto   auto 10/100BaseTX
swicth46    Fa0/4     srvsac7-a          notconnect   729          auto   auto 10/100BaseTX
[...]
swicth16    Fa0/27    srv23_public       connected    732          full    100 10/100BaseTX
swicth16    Fa0/28    srvtea8_public     connected    732          full    100 10/100BaseTX
[...]

Script

#!/bin/bash
#echo "date du jour : `date`"  > resultat.txt
# On vide le fichier de resultat
cat /dev/null > resultat.txt
 
FICHIER_MDP="/tmp/TestExpect/mdp"
FICHIER_LISTE="/tmp/TestExpect/liste_sw.txt"
FICHIER_RESULTAT="/tmp/TestExpect/resultat.txt"
chmod 700 ${FICHIER_MDP}
PASS=`cat ${FICHIER_MDP}`
chmod 000 ${FICHIER_MDP}
#echo "le mdp est $PASS"
 
function liste()
{
	USER=adminint
	NAME="$line"
	DOMAINE="exemple.com"
	IP=$NAME.$DOMAINE
	SHOW_INT="sh interfaces status"
expect << EOF
	# pour ne pas attendre trop longtemps
	log_user 0
	#set timeout 10
	# sort si CTRL-C
	# trap exit SIGINT
	# temoin de connexion
	# set logged_in 1
 
spawn ssh -o StrictHostKeyChecking=no ${USER}@${IP}
#set passage 0
# La variable ETAT permet d'effetuer les etapes dans l'ordre suivant :
# 1 --> Saisie du password
# 2 --> Taille du buffer du terminal au maximum. Cela évite les lignes de type --more--
# 3 --> Liste des interfaces
# 4 --> Quite le switch
 
set ETAT 1
 
expect -re "(P|p)assword: " {
	if (\$ETAT==1) {
	    	send -- "$PASS\r"
		set ETAT 2
	} else {
#		error
	}
}
 
 
expect "${NAME}#" {
	if (\$ETAT==2) {
		set passage 1
		send -- "terminal length 0\r"
		set ETAT 3
	} else {
#		error
	}
}
 
expect "${NAME}#" {
	if (\$ETAT==3)	{
		set passage 2
		send -- "sh interfaces status\r"
		set ETAT 4
	} else {
#		error
	}
}
 
log_user 1
expect "${NAME}#" {
	if (\$ETAT==4) {   
	#	set fic $expect_out(buffer)	
		send -- "exit\r" 
	} else {
#		error
	}
}
 
log_user 0
EOF
}
 
while read line
do
	RESULT=$(liste ${line})
	# Le résultat de la fonction "liste" est stoké dans une fichier temporaire
	echo "${RESULT}" > tmp
	# On supprime les 3 premieres lignes et la derrnière ligne du fichier temporaire
        RESULT=$(sed -e '1,3d' -e '$d' tmp)
	# Le résultat du sed est stoké dans un fichier temporaire
	echo "${RESULT}" > tmp
	# Le nom du switch est ajouté au début de chaque ligne
	RESULT=$(sed 's/^/'$line'    /' tmp)
	echo "${RESULT}" >> ${FICHIER_RESULTAT} 
done < ${FICHIER_LISTE}
rm -f tmp
 
#echo -e "\n"

 
asr/sys/expect/sh_int.txt · Dernière modification: 2016/03/29 23:37 (édition externe)
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki