SHELL Appel ssh dans une fonction

Résolu
tlep Messages postés 597 Statut Membre -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

j'ai un souci avec des appels ssh dans une fonction.

J'ai fait un script qui prend en paramètres un fichier contenant une liste de hosts pour entr'autres y réaliser un test de connectivité ssh (via échange de clés)

Dans ce script, je fais un cat d'un fichier contenant la liste des hosts, puis une fonction exécute la connectivité.

for HOSTS in $(cat mon_fichier);do
Test_Connect HOSTS
done

function Test_Connect
{
ssh root@$1 'bash -c 'hostname"'
}

Ca fonctionne bien, si ce n'est que la fonction ne s'exécute qu'une fois sur le premier host appelé, comme si elle effectuait un "return" immédiatement après le premier appel.

Et je ne vois pas comment éviter celà (sauf à ne pas utiliser de fonction) ?

Merci ;-)
Configuration: Linux Debian
Mozilla 1.8.1.4

7 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    Et comme ça ?:

    LISTE=$(cat mon_fichier)
    for HOSTS in $LISTE;do
    Test_Connect HOSTS
    done

    function Test_Connect
    {
    ssh root@$1 'bash -c 'hostname"'
    }
    0
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Ben chez moi avec ce script ça marche bien :
    #! /bin/bash
    
    function Test_Connect
    {
    ssh jp@$1 'bash -c 'hostname''
    }
    
    for HOTE in $(cat Fich);do
    Test_Connect $HOTE
    done
    
    PS. Identification par "passphrase".
    0
  3. tlep Messages postés 597 Statut Membre 118
     
    En fait çà ne vient pas de la fonction; je ne comprends pas du tout :-(

    Pour simplifier j'ai fait :

    while read LIGNES;do
    ssh root@dev-apache "hostname"
    done < CONFIG/dev-apache

    Sachant que le fichier "CONFIG/dev-apache" contient 3 lignes, il devrait m'afficher 3 fois le hostname de dev-apache.

    Or il affiche une seule fois: une seule connexion ssh puis exit !!
    Tandis que, si je mets un echo "$LIGNES", ben il affiche bien successivement les 3 lignes

    :-((
    0
  4. tlep Messages postés 597 Statut Membre 118
     
    Encore plus bizarre:
    si je fais

    for i in 1 2 3 4 5;do
    ssh root@dev-apache "hostname"
    done

    Ben là il effectue bien 5 connexions !
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    J'ai déjà vu ça sur Solaris en sh (ou ksh).
    C'est comme si un rsh ou ssh dans une boucle avec redirection du standard input "annulait"
    ce standard input.

    marche pas:
    while read LIGNES;do
    ssh root@dev-apache "hostname"
    done < CONFIG/dev-apache

    marche ok, mais remplacer 1 2 3 4 par `cat fichier` va faire qu'une boucle:
    for i in 1 2 3 4 5;do
    ssh root@dev-apache "hostname"
    done
    0
    1. tlep Messages postés 597 Statut Membre 118
       
      Oui y'a des trucs bizarres en shell des fois..

      J'ai contourné le souci via:

      for LIGNES in $(seq 1 $(wc -l mon_fichier|awk '{print $1}'));do
      LIGNE=$(head -$LIGNES $1/$2|tail -1)
      ssh root@mon_hosts "ls $LIGNE/"
      done

      ;-)
      0
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      Et comme ça ?
      while read LIGNES;do
      ssh root@dev-apache "hostname" </dev/null
      done < CONFIG/dev-apache
      0
  7. tlep Messages postés 597 Statut Membre 118
     
    Superbe ! ca marche !

    Merci pour la suggestion !
    0
  8. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    De rien ... Unix c'est grand !!
    0