SHELL Appel ssh dans une fonction [Résolu/Fermé]

Signaler
Messages postés
597
Date d'inscription
jeudi 21 février 2002
Statut
Membre
Dernière intervention
25 octobre 2012
-
Messages postés
18187
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
31 juillet 2020
-
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 ;-)

7 réponses

Messages postés
18187
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
31 juillet 2020
4 932
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"'
}
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
5 décembre 2019
4 753
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".
Messages postés
597
Date d'inscription
jeudi 21 février 2002
Statut
Membre
Dernière intervention
25 octobre 2012
116
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

:-((
Messages postés
597
Date d'inscription
jeudi 21 février 2002
Statut
Membre
Dernière intervention
25 octobre 2012
116
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 !
Messages postés
18187
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
31 juillet 2020
4 932
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
Messages postés
597
Date d'inscription
jeudi 21 février 2002
Statut
Membre
Dernière intervention
25 octobre 2012
116
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

;-)
Messages postés
18187
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
31 juillet 2020
4 932
Et comme ça ?
while read LIGNES;do
ssh root@dev-apache "hostname" </dev/null
done < CONFIG/dev-apache
Messages postés
597
Date d'inscription
jeudi 21 février 2002
Statut
Membre
Dernière intervention
25 octobre 2012
116
Superbe ! ca marche !

Merci pour la suggestion !
Messages postés
18187
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
31 juillet 2020
4 932
De rien ... Unix c'est grand !!