Announcement

Collapse
No announcement yet.

Plugin de test de FS en Read-only via SSH

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Plugin de test de FS en Read-only via SSH

    Bonjour,

    Pour répondre à un besoin j'ai écrits un plugin qui test via ssh si les fs sont en read-only sur des machine linux en créant des fichier sur chaque fs.
    voici le script en question:

    Code:
    #!/bin/bash
    # v0.1
    
    # Vérifier sur un serveur distant le statut des systèmes de fichiers locaux
    
    #CENTREON STATE
    STATE_OK=0
    STATE_WARNING=1
    STATE_CRITICAL=2
    STATE_UNKNOWN=3
    STATE_DEPENDENT=4
    
    # constants
    SSH_CMD='for fs in $(mount -t ext2,ext3,ext4,xfs | cut -f3 -d " "); do if sudo touch $fs/test-fs &> /dev/null; then sudo rm -f $fs/test-fs &> /dev/null; printf "$fs : read-write\n"; else printf "$fs : READ-ONLY\n"; fi; done'
    SSH_USER="userX"
    FS_OUTPUT=/tmp/check_fs_by_ssh.output
    
    #variable
    HOSTADDR=""
    
    
    #Help Function
    FUNC_HELP()
    {
    echo -e \\n"Usage: ./check_fs_by_ssh -H HOST_IP_ADDR"
    echo -e "Usage: ./check_fs_by_ssh -h : affiche cette aide"\\n
    echo -e "Requirement: SSH key of Centreon poller must have been transfered to the target host"\\n
    exit 1
    }
    
    #check the number of argument
    if [ $# -eq 0 ] ; then
            FUNC_HELP
    fi
    
    #Analyse des options
    while getopts "H:" ARGS ; do
            case $ARGS in
                    H) #Affect HOSTADDR variable
                            HOSTADDR=$OPTARG
                            ;;
    
                    h) #Show Help
                            FUNC_HELP
                            ;;
    
                    \?) #unrecognized option - show help
                            FUNC_HELP
                            ;;
            esac
    done
    
    #####################MAIN
    
    ssh -t -l "$SSH_USER" "$HOSTADDR" "$SSH_CMD" > "$FS_OUTPUT"
    
    
    #check FS_OUTPUT variable
    if test ! -e "$FS_OUTPUT" ; then
            echo "Warning: sortie du test vide"
            exit "$SATE_WARNING"
    fi
    
    #output command analyse
    if grep -q READ-ONLY "$FS_OUTPUT"  ; then
            echo -e "CRITICAL: $(cat "$FS_OUTPUT" |grep "READ-ONLY")"
            rm -f "$FS_OUTPUT"
            exit "$STATE_CRITICAL"
    
    else
            echo -e "OK: ALL FS WRITABLE"
            rm -f "$FS_OUTPUT"
            exit "$STATE_OK"
    fi
    Lorsque je lance manuellement la commande sur mon serveur central avec l'utilisateur centreon-engine aucun problème, la connexion ssh se fait bien grâce à l’échange de clef, et le compte que j'utilise pour me connecter possède bien les droits pour créer les fichier sur chaque fs, résultat: tous les FS sont OK sauf un que j'ai volontairement passé read-only bref tout fonctionne.

    Le problème viens que lorsque c'est centreon qui lance le plugin il voit TOUS les FS en read-only, c'est n'est pas un problème SSH puisque la connexion se fait bien et le fichier /tmp/check_fs_by_ssh.output est bien créer, je me dis donc que le problème viens des droits du compte userX mais je ne comprends pas pourquoi en lançant la commande manuellement ça passe mais quand c'est l'ordonnanceur qui le fait cela ne passe plus.

    Je ne vois pas vraiment de quel coté regardé, je suis ouvert à toutes pistes.
    Merci

  • #2
    Bonjour,

    J'ai trouver une piste dans le var/log/secure de mon serveur cible j'ai ceci pour chaque FS:
    Code:
    userX : sorry, you must have a tty to run sudo ; TTY=unknown ; PWD=/home/userX ; USER=root ; COMMAND=/bin/touch //test-fs
    Pourtant l'option -t de ssh avais pour but de créer un pseudo tty pour éviter ce problème.
    Il semble donc qu'en lançant le plugin manuellement l'option -t fonctionne, mais lorsque lancer par l'ordonnanceur cette option ne fonctionne plus ou alors la variable n'est pas correctement transmise

    Comment


    • #3
      Pour ceux que ça interesse j'ai finalement trouver la reponse:
      utiliser l'option -t de ssh deux fois pour réellement forcer l'utilisation d'un tty lorsque ssh n'a pas de tty local de définie, dans mon script cela donne:
      Code:
       
       ssh -tt -l "$SSH_USER" "$HOSTADDR" "$SSH_CMD" > "$FS_OUTPUT"

      Comment

      Working...
      X