FlorentLou

FlorentLou

Inscrit le 02 janvier 2017

  1. #! /bin/bash
    # ------------------------------------------------------------------
    # [Florent LOUVEAU] check_fqdn_smartcenter.sh
    # 17/10
    # Ce script récupère les objets "hosts" du smartcenter
    # et vérifie si les IP correspondant aux objets sont à
    # jour à l'aide d'une résolution via "nslookup". Un mail
    # de compte-rendu est alors envoyé indiquant s'il y a
    # lieu les "hosts" à mettre à jour.
    #
    # Dependences et commandes :
    # expect
    # nslookup
    # mail
    # ------------------------------------------------------------------
    declare -A smartcenter # Initialisation du Tableau contenant les infos FQDN => IP du smartcenter.
    declare -A resol # Initialisation du Tableau contenant les infos FQDN => IP de la résolution nslookup.
    ligne_precedente="" # Initialisation de la Variable contenant la ligne précédente du fichier créé par l'utilitaire checkpoint dbedit.
    fqdn_precedent=0 # Initialisation de la Variable indiquant si la ligne précédente du fichier créé par dbedit était un FQDN ou pas.
    difference="" # Initialisation de la Variable indiquant la liste des différences entre les tableaux "smatcenter" et "resol".
    testdns="" # Initialisation de la Variable qui indiquera dans compte-rendu d'exécution si le FQDN parcouri est OK ou NOK.

    echo 'set timeout 30
    spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no admin@smartcenter.tf1.fr
    expect {
    timeout {puts "timed out"; exit}
    -re "admin\@smartcenter\.tf1\.fr'"\'"'s password: $" { send "PASSWORD\r" }
    }
    expect {
    timeout {puts "timed out"; exit}
    -re "SmartCenter> $" {send "expert\r"}
    }
    expect {
    timeout {puts "timed out"; exit}
    -re "Enter expert password\:$" {send "PASSWORD\r"}
    }
    expect {
    timeout {puts "timed out"; exit}
    -re "Expert@SmartCenter:0\]# $" {send "echo -e \"query network_objects\n-q\n\" | dbedit -local \r"}
    }
    expect {
    timeout {puts "timed out"; exit}
    -re "Expert@SmartCenter:0\]# $" {send "exit\r"}
    }
    expect {
    timeout {puts "timed out"; exit}
    -re "SmartCenter> $" {send "exit\r"}}' > /dev/script/temp/temp_connexion.txt
    # On créé dans le dossier temp un fichier contenant les commandes interprétable par la fonction "expect" permettant de simuler une connexion au smartcenter et
    # le passage de commande. Le timeout fixé à 30s signifie que si l'on attends maximum 30s la ligne en question, sinon on sort du programme (exit).

    expect /dev/script/temp/temp_connexion.txt|grep -E "(^Object Name: FQDN_|^ ipaddr: )"|sed "s/FQDN_//"|cut -d':' -f2|cut -d' ' -f2 > /dev/script/temp/temp_checkdns.txt
    # On execute le fichier précédement créé avec la commande expect. On ne garde que les lignes qui comporte un FQDN ou une IP. On supprime les caractères "FQDN_" (concerne les FQDN). On ne garde que ce qui suit le 1er ":" des chaînes de caractères (concerne les IP). On supprime les espaces devant les chaînes de caractères.
    # On stocke la sortie dans un nouveau fichier dans le répertoire "temp".

    while read ligne # On parcourt le fichier précédement créé.
    do
    ligne=${ligne%?} # On supprime le dernier caractère.
    if [[ $ligne =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ $fqdn_precedent = 1 ]]; then # Si la ligne en question est une IP et que la ligne précédent était un FQDN.
    fqdn_precedent=0 # On indique pour la prochaine iteration que la ligne actuelle n'est pas un FQDN.
    smartcenter[$ligne_precedente]=${smartcenter[$ligne_precedente]}" "$ligne # On stocke dans le tableau "smartcenter" pour la clé $ligne_precedente la ligne actuelle à laquelle on rajoute les entrées
    # existantes dans le cas où plusieurs mêmes hosts existent dans le smartcenter (qui diffèrent via "_#" où # représente un numéro)
    fi
    if [[ $ligne != [0-9]* ]]; then # Si la ligne en question ne commence pas par un chiffre.
    if [[ $ligne = *_[0-9] ]]; then # Si la ligne en question se termine par un "_#" où # représente un numéro
    ligne=`echo $ligne | cut -d'_' -f1` # On ne garde que la valeur avant le "_".
    fi
    ligne_precedente=$ligne # On stocke la ligne actuelle dans la variable pour la prochaine iteration.
    fqdn_precedent=1 # On indique pour la prochaine iteration que la ligne actuelle est un FQDN.
    fi
    done < /dev/script/temp/temp_checkdns.txt

    for elem in ${!smartcenter[*]} ; do # On parcourt le tableau smartcenter précédement créé.
    smartcenter[${elem}]=`echo \`echo ${smartcenter[${elem}]}| cut -c 1-\`|tr " " "\n"|sort|tr "\n" " "` # On supprime le dernier caractère (un espace) de la valeur de la clé parcouru. On remplace l'espace par un "\n". On trie dans l'ordre alphabétique grâce à la fonction sort qui a besoin des "\n" et on retrasforme les "\n" en espace.
    resol[${elem}]=`echo \`nslookup ${elem}"." | grep "Address: " | cut -d' ' -f2\`|tr " " "\n"|sort|tr "\n" " "` # On stocke dans un tableau les IP renvoyés par la résolution nslookup de la clé parcouru en ne gardant que les lignes contenant "Address: " auxquels on ne conservent que ce qui suit le 1er espace. Puis comme précédement on trie dans l'ordre alphabétique.
    if [[ ${smartcenter[${elem}]%?} = ${resol[${elem}]%?} ]]; then # On vérifie enfin si les valeurs des tableaux pour la clé parcouru sont identique ou non.
    testdns=$testdns"\n$elem : OK" # On stocke le résultat dans une variable.
    else
    for i in ${resol[${elem}]%?};
    do
    if [[ $(echo ${smartcenter[${elem}]%?} | grep -w "$i") = "" ]]; then
    difference=$difference"\n$elem : \"${smartcenter[${elem}]%?}\" versus \"${resol[${elem}]%?}\"."
    testdns=$testdns"\n$elem : NOK - ERREUR"
    else
    testdns=$testdns"\n$elem : OK (permissif)"
    fi
    done
    fi
    done

    echo -e "========= $(date +%Hh%M' : '%d/%m/%Y) =========\n"$testdns"\n" > /dev/script/temp/liste_fqdn.txt
    message="Bonjour,\n\nLe script de check DNS "

    if [ -z "$difference" ]; then
    message=$message"n'a remonté aucune anomalie.\n\nBonne journée."
    echo -e "$message" | mutt -a /dev/script/temp/liste_fqdn.txt -s "[SCRIPT][RAS] Check des FQDN du SmartCenter $(date +%d/%m/%Y)" -- TF1-DCSI-ArchitectesReseau@tf1.fr
    #echo -e "$message" | mutt -a /dev/script/temp/liste_fqdn.txt -s "[SCRIPT][RAS] Check des FQDN du SmartCenter $(date +%d/%m/%Y)" -- flouveau@tf1.fr
    echo -e "$message" | mutt -a /dev/script/temp/liste_fqdn.txt -s "[SCRIPT][RAS] Check des FQDN du SmartCenter $(date +%d/%m/%Y)" -- admin_reseau@tf1.fr
    else
    message=$message"a remonté le(s) problème(s) suivant(s):\n$difference\n\nProcédure : \"\\\\tfprdsto13\\Patrimoine_Documentaire\\02-Realisation\\RES-Documentations_Reseaux\\Architecture Internet\\9_Check_FQDN.docx\"\n\nBonne journée."
    echo -e "$message" | mutt -a /dev/script/temp/liste_fqdn.txt -s "[SCRIPT][ERREUR] /!\\ Check des FQDN du SmartCenter $(date +%d/%m/%Y) /!\\ -- CORRECTION NECESSAIRE" -- TF1-DCSI-ArchitectesReseau@tf1.fr
    #echo -e "$message" | mutt -a /dev/script/temp/liste_fqdn.txt -s "[SCRIPT][ERREUR] /!\\ Check des FQDN du SmartCenter $(date +%d/%m/%Y) /!\\ -- CORRECTION NECESSAIRE" -- flouveau@tf1.fr
    echo -e "$message" | mutt -a /dev/script/temp/liste_fqdn.txt -s "[SCRIPT][ERREUR] /!\\ Check des FQDN du SmartCenter $(date +%d/%m/%Y) /!\\ -- CORRECTION NECESSAIRE" -- admin_reseau@tf1.fr
    fi
    rm /dev/script/temp/temp_checkdns.txt /dev/script/temp/temp_connexion.txt /dev/script/temp/liste_fqdn.txt

    Date 02 janvier 2017
Publicité