IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration système Discussion :

Boucle while rompue par plink?


Sujet :

Administration système

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 4
    Par défaut Boucle while rompue par plink?
    Bonjour

    Je suis en train de concevoir un script de connexion à plusieurs serveurs linux depuis une machine linux du même réseau (très sécurisé).
    Je ne peux pas générer de clés ssh sur les serveurs, donc j'ai choisi plink, qui me permet de passer un mot de passe en paramètres.

    Et là je bute depuis un moment sur un souci avec la commande plink dans une boucle while.

    J'ai pour l'instant 3 fichiers côtes à côtes:

    1) Un fichier CSV (base de données pour plink, 1ligne=1serveur) structuré ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    nomcomplet1;password1:adresseip1
    nomcomplet2;password2:adresseip2
    nomcomplet3;password3:adresseip3
    ...
    2) Un fichier COMMANDES (que plink doit exécuter sur chaque serveur) structuré ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if argument
    then
    commande1
    else
    commande2
    fi
    3) Et enfin le SCRIPT proprement dit, structuré ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #DEFINITION DES VARIABLES GLOBALES
    csv=/chemin/fichier.csv
    log=/chemin/log.txt
    commandes=/chemin/commandes.txt
     
    #SUPPRESSION DU LOG PRECEDENT
    rm -f $log
     
    #RECUPERATION DES VARIABLES CONTENUES DANS LE FICHIER CSV + BOUCLE DE CONNEXION AUX SERVEURS
    while read line
    do
    nom=`echo $line | cut -d';' -f1`
    pass=`echo $line | cut -d';' -f2`
    ip=`echo $line | cut -d';' -f3`
    echo -n $nom"-" >>$log
    plink root@$ip -pw $pass -batch -m $commandes >>$log
    done <$csv
    exit
    Pour l'instant je veux juste récupérer toutes les variables de chaque ligne pour exécuter mes plink autant de fois qu'il y a de lignes (puisque 1ligne=1serveur).

    Le problème est que logué en root, lorsque je lance le script tel quel, seule la 1e ligne du fichier CSV est lue.
    Le log obtenu juste pour cette ligne est correct, mais le script me rend la main sans aller lire les lignes suivantes comme si après l'exécution du 1er plink, la boucle était interrompue.

    D'ailleurs si je remplace ma commande plink par un simple echo des variables, j'ai bien les valeurs propres à chaque connection qui viennent s'afficher ligne après ligne...
    J'ai également essayé avec une boucle for, même constat: echo boucle mais plink rompt la boucle.

    Quelqu'un aurait-il une idée d'où vient le souci?

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Retires le "exit" de ton fichier de commandes

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 4
    Par défaut
    Merci zipe31 de ta réponse très rapide.

    Piste intéressante^^ mais j'ai retiré le "exit" et ça ne change rien.

    NB: j'ai édité mon 1er post, le script que j'avais copié-collé n'était pas dans sa dernière version.

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Bizarre Chez moi ça change tout justement et correspond parfaitement à la description de ton bug...

    La preuve (au passage j'ai modifié le "IFS" pour traiter tes données sans avoir recours à "cut") :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ cat plop 
    nomcomplet1;password1:adresseip1
    nomcomplet2;password2:adresseip2
    nomcomplet3;password3:adresseip3
    Sans "exit" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $ cat foo.sh 
    #! /bin/bash
     
    IFS=';:'
    while read nom pass ip
    do
    echo "Nom = ${nom} - Pass = ${pass} - IP = ${ip}"
    #exit
    done < plop
     
    $ ./foo.sh 
    Nom = nomcomplet1 - Pass = password1 - IP = adresseip1
    Nom = nomcomplet2 - Pass = password2 - IP = adresseip2
    Nom = nomcomplet3 - Pass = password3 - IP = adresseip3
    Avec "exit" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $ cat foo.sh 
    #! /bin/bash
     
    IFS=';:'
    while read nom pass ip
    do
    echo "Nom = ${nom} - Pass = ${pass} - IP = ${ip}"
    exit
    done < plop
     
    $ ./foo.sh 
    Nom = nomcomplet1 - Pass = password1 - IP = adresseip1
     
    $
    Il doit y avoir un truc avec la commande "plink"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème thread attente par boucle while
    Par chlamy dans le forum Android
    Réponses: 4
    Dernier message: 24/08/2014, 02h16
  2. Réponses: 1
    Dernier message: 19/04/2014, 20h45
  3. Incrémenter un Array par une boucle While
    Par Misoss dans le forum Langage
    Réponses: 3
    Dernier message: 09/08/2010, 21h38
  4. [MySQL] boucle while classer par domaine
    Par akara dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 26/03/2009, 15h48
  5. chargement du Combo Par sql boucle While wend
    Par r.mehdi dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 09/06/2008, 18h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo