SHELL Appel ssh dans une fonction
Résolu
tlep
Messages postés
597
Statut
Membre
-
dubcek Messages postés 19021 Statut Contributeur -
dubcek Messages postés 19021 Statut Contributeur -
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 ;-)
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 ;-)
A voir également:
- SHELL Appel ssh dans une fonction
- Nommez une application d'appel vidéo ou de visioconférence - Guide
- Fonction si et - Guide
- Classic shell - Télécharger - Personnalisation
- Appel privé - Guide
- Ssh secure shell download - Télécharger - Divers Web & Internet
7 réponses
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"'
}
LISTE=$(cat mon_fichier)
for HOSTS in $LISTE;do
Test_Connect HOSTS
done
function Test_Connect
{
ssh root@$1 'bash -c 'hostname"'
}
Salut,
Ben chez moi avec ce script ça marche bien :
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".
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
:-((
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
:-((
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 !
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 !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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