Contenu | Rechercher | Menus

Annonce

DVD, clés USB et t-shirts Ubuntu-fr disponibles sur la boutique En Vente Libre

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 14/10/2021, à 14:01

Moijerem31

execution de commande ssh non bloquante

Bonjour a vous tous .
Dans un script je lance des commande via ssh sur plusieurs ip définit ,
J'aimerais que cela s'enchaine de façon rapide , alors que pour le moment cela s’exécute de façon chronophage .
Merci pour votre aide


date
timeout=1
exec > /tmp/resultlogs/`date +%Y-%m-%d-%H-%M`-Result



for ip in 192.168.{1..9}.{1,3,4,5,7,8,10,12}
do
        echo "<ip>${ip}</ip>";
	ssh -o ConnectTimeout=$timeout user@${ip} "command execution ";
           
done



for ip in 192.168.{10..12}.{1,3,4,5,7,8,10,12}
do
        echo "<ip>${ip}</ip>";
	ssh -o ConnectTimeout=$timeout user@${ip} "command execution";

done

Hors ligne

#2 Le 14/10/2021, à 14:41

inbox

Re : execution de commande ssh non bloquante

Salut,

Je n'y connais quasiment rien en script. Une bonne idée serait de lancer plusieurs scripts en parallèle, un peu comme indiqué dans ce sujet.

A+


Un problème résolu ? Indiquez le en modifiant le titre du sujet.
Linux user 449594

Hors ligne

#3 Le 14/10/2021, à 14:48

Moijerem31

Re : execution de commande ssh non bloquante

Merci effectivement je procède déjà de cette façon mais j'aimerais que ma boucle for soit la plus rapide possible smile

Dernière modification par Moijerem31 (Le 14/10/2021, à 14:49)

Hors ligne

#4 Le 14/10/2021, à 18:30

Sciensous

Re : execution de commande ssh non bloquante

je tape peut-être à côté: mettre un & à la place du ; à la fin des lignes ssh
pour lancer les ssh en parallèle ?
(pense à mettre un espace avant le &)

cool


antiX 19 (Debian Buster) et (L)Ubuntu focal 20.04
( sous LXDE et gnome-shell )

Hors ligne

#5 Le 14/10/2021, à 18:52

Zakhar

Re : execution de commande ssh non bloquante

Ce que tu cherches c'est xargs

Il permet de lancer plusieurs trucs en parallèle avec un/des paramètres en entrée.

Très pratique, mais avec la contrainte que les paramètres sont à la fin. Si la commande lancée a ses paramètres variables "au milieu" ça coûte juste un petit script.

Par contre comme ça va s'exécuter tout en parallèle, du moins du nombre de process que tu précises, la sortie par défaut est inutilisable si la commande affiche plusieurs lignes puisque tout va s'y mélanger, et il faut penser à rediriger si tu veux avoir le résultat.

Démo, j'ai créé 3 fichiers avec du contenu aléatoire :

$ ls file?
file1  file2  file3

$ ls file? | xargs -n1 -P3 md5sum 
8761f91d4cb8ca8b7add569a10cc911e  file1
687d4563ff6a4edf40e17712705ab318  file2
93603affe46a3b8da02f6a8997e7282e  file3

J'obtiens le md5 des 3 qui est calculé "en parallèle" sur 3 process (-P 3)
Le -n1 dit à xarg de prendre un seul argument dans ce qu'il a dans l'entrée standard pour le rajouter à la commande spécifiée, en l'occurrence md5sum

Là on n'a pas besoin de rediriger car le résultat est une seule ligne, et il n'y a pas de mélange à l'intérieur de la ligne (propriété générique de stdout).

[Mon exemple est peut-être peu démonstratif parce qu'avec md5sum file? on obtient le même résultat affiché... mais si les fichiers sont gros, tu peux vérifier que c'est bien du parallélisme... après ça va se "sérialiser" au niveau du disque ou du réseau et le gain n'est pas toujours immense !]

Dernière modification par Zakhar (Le 14/10/2021, à 19:04)


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#6 Le 14/10/2021, à 22:13

Zakhar

Re : execution de commande ssh non bloquante

Cela dit... vu le bout de script que tu nous montres, si l'objectif est de tester que le port 22 d'une machine du réseau local est ouvert, il y a de bien meilleurs outils pour ça : nmap.

Et une fois que tu as trouvé une telle machine, ensuite tu fais le ssh !

Dernière modification par Zakhar (Le 14/10/2021, à 22:14)


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#7 Hier à 08:07

bruno

Re : execution de commande ssh non bloquante

+1
Il faudrait expliquer ton objectif.
Parce que je ne vois pas comment une boucle qui envoie une commande en SSH à 108 machines pourrait être rapide, même avec un délai d'expiration de 1 seconde.


Le mensonge et la crédulité s'accouplent et engendrent l'opinion.

Hors ligne

#8 Hier à 08:35

Moijerem31

Re : execution de commande ssh non bloquante

Tout d'abord merci pour vos réponses .
Je cherche a exécuter des commandes définit sur une liste d adresse ip connu .
Le but est bien de gagné du temps sur l exécution.
Mon ancien script listé toute les adresses IP .(exemple ci dessous )
Mais il nous arrive parfois de modifier les ip et la boucle for ip nous correspond bien pour définir rapidement le range des adresse ip

echo "eq1"; ssh -o ConnectTimeout=$timeout user@192.168.1.1 "umount /media/ssd1; umount /media/ssd2;sleep 1; fsck.ext4 -y /ssd1p1; sleep 1;  fsck.ext4 -y /ssd1p2; sleep 1"
echo "eq2"; ssh -o ConnectTimeout=$timeout user@192.168.1.2 "umount /media/ssd1; umount /media/ssd2;sleep 1; fsck.ext4 -y /ssd1p1; sleep 1;  fsck.ext4 -y /ssd1p2; sleep 1"
echo "eq3"; ssh -o ConnectTimeout=$timeout user@192.168.1.3 "umount /media/ssd1; umount /media/ssd2;sleep 1; fsck.ext4 -y /ssd1p1; sleep 1;  fsck.ext4 -y /ssd1p2; sleep 1"

Dernière modification par Moijerem31 (Hier à 08:42)

Hors ligne

#9 Hier à 09:38

bruno

Re : execution de commande ssh non bloquante

C'est un peu curieux comme façon de procéder…
Pour obtenir la liste des IP avec le port 22 ouvert :

nmap 192.168.1.0/24 -p22 --open -oG - | awk '/22\/open.*/{print $2}'

et faire la boucle sur cette liste.


Le mensonge et la crédulité s'accouplent et engendrent l'opinion.

Hors ligne