Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 28-05-2020 08:07:25

spawn63
Membre
Inscription : 28-05-2020

[RÉSOLU] Script bash se connecter sur plusieurs machine via ssh

Bonjour,
Je suis débutant sur bash et j’essaie de réaliser un script qui me permettrais de me connecter via ssh sur plusieurs machines afin de réaliser plusieurs opérations de modifications sur les postes concernés.

Je m'explique j'ai créer un réseau virtuel avec 1 serveur dhcp qui attribue des ip dynamique sur deux réseau différents  (192.168.10.0/24 et 192.168.11.0/24). Toutes les machines de mon réeau son sur buster.
donc je sais que pour extraire mes adresse IP je peux utiliser nmap avec la commande

nmap -sP 192.168.10.0-250 192.168.11.0-250 > ip




puis la commande pour extraire les ip:

grep Nmap ip > ip1




Enfin pour finir couper les caractères utile a mon futur script:

cut -c21-34 ip1 > list.ip




cela fait plusieurs jour (durant mes temps libre) que j’essaie d'utiliser cette liste afin de pouvoir via un script me connecter sur les ip concernées et je ne trouve pas d'élément probant et je n'ai personnes avec qui travailler sur ce sujet, donc je suis venu ici pour voir si quelqu'un pourrais me donner des indices, et surtout réfléchir à la construction de mon script?!

Merci par avance pour vos lumières apportées

Dernière modification par spawn63 (29-05-2020 13:20:22)

Hors ligne

#2 28-05-2020 10:36:57

David5647
Membre
Distrib. : Debian Bullseye/Sid
Noyau : 5.7.0-2-amd64
(G)UI : KDE/i3wm
Inscription : 27-08-2017

Re : [RÉSOLU] Script bash se connecter sur plusieurs machine via ssh

nmap -sP 192.168.1.0-255 | grep -e '\([0-9]\{3\}\.\([0-9]\{1,3\}\.\)\{2\}[0-9]\{1,3\}\)' | sed -e 's/.*\([0-9]\{3\}\.\([0-9]\{1,3\}\.\)\{2\}[0-9]\{1,3\}\).*/\1/g'


192.168.1.1
192.168.1.12
192.168.1.18
192.168.1.34
192.168.1.101
 


Et bah, ça fait peur

Il y a un truc que je n'ai toujours pas compris dans sed, c'est que ll'échappement de caractère semble marcher à l'envers...
Il faut échapper les parenthèses pour dire qu'il sont spéciaux et non que ce sont ces caractères normaux? enfin...

Si je retire les échappement :

\([0-9]\{3\}\.\([0-9]\{1,3\}\.\)\{2\}[0-9]\{1,3\}\)


devient

([0-9]{3}\.([0-9]{1,3}\.){2}[0-9]{1,3})


du coup c'est un peu plus clair, mais quand mm:

[0-9] : un chiffre de 0 à 9
{3} : 3 fois
\. : un point
([0-9]{1,3}\.){2} : 2 fois (de 1 à 3 fois un chiffre puis un point)
[0-9]{1,3} : et finalement encore de 1 à 3 chiffres
 

=> ça fait un adresse ip en regex: xxx.xxx.xxx.xxx
avec

grep -e regex: on ne garde que les lignes avec des ip
sed -e 's/.*(regex).*/\1/g: on match toute la ligne avec les .* et forme un groupe de capture avec les '(' et on remplace la ligne avec le groupe de capture '\1'

Dernière modification par David5647 (28-05-2020 10:50:53)

Hors ligne

#3 28-05-2020 10:40:02

Alyve
Adhérent(e)
Lieu : Belgique
Distrib. : Debian Sid
Noyau : Linux 5.6.0-1-amd64
(G)UI : i3 ftw
Inscription : 31-07-2011
Site Web

Re : [RÉSOLU] Script bash se connecter sur plusieurs machine via ssh

Bonjour,

J'ai fait ce que tu souhaites il y a quelques années. La manière dont on le faisait (en cours), c'était:

- déployer des scripts sur toutes les machines
- par ssh, exécuter ces scripts

C'était exactement comme décrit ici.

Pour faire court tu peux faire une liste de commande comme ceci:

ssh getrichordevtryin 'uptime; df -h'



Le résultat sera:


 11:34:45 up 1 day, 10:08,  0 users,  load average: 0,01, 0,02, 0,00
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
udev               959M       0  959M   0% /dev
tmpfs              195M     11M  185M   6% /run
/dev/sda1          9,9G    4,7G  4,8G  50% /
tmpfs              974M       0  974M   0% /dev/shm
tmpfs              5,0M       0  5,0M   0% /run/lock
tmpfs              974M       0  974M   0% /sys/fs/cgroup]
 



Pour exécuter un script distant, tu peux faire ceci par exemple:

~ ❯ ssh getrichordevtryin 'bash test.sh'
output: coucou



Test.sh ne contenant qu'un « echo 'coucou' ». smile


Dell Latitude E7450 • Debian Sid • i3
Fairphone 3 • Lineage OS • Pie
BlogShaarliMastodon

Hors ligne

#4 28-05-2020 10:55:56

spawn63
Membre
Inscription : 28-05-2020

Re : [RÉSOLU] Script bash se connecter sur plusieurs machine via ssh

@Alyve, ouahou... super enfin matière à travailler , merci j'ai bien fait de venir ici,
@David5647, merci pour ton retour et tes explication, je vais tout travailler et  décortiquer tous ça et vous donner un retour sur mon taf big_smile big_smile big_smile

Dernière modification par spawn63 (28-05-2020 11:03:02)

Hors ligne

#5 28-05-2020 11:14:24

Alyve
Adhérent(e)
Lieu : Belgique
Distrib. : Debian Sid
Noyau : Linux 5.6.0-1-amd64
(G)UI : i3 ftw
Inscription : 31-07-2011
Site Web

Re : [RÉSOLU] Script bash se connecter sur plusieurs machine via ssh

spawn63 a écrit :

@Alyve, ouahou... super enfin matière à travailler , merci j'ai bien fait de venir ici,
@David5647, merci pour ton retour et tes explication, je vais tout travailler et  décortiquer tous ça et vous donner un retour sur mon taf big_smile big_smile big_smile



De rien. big_smile

Je voudrais juste revenir sur quelque chose. smile
Tu peux analyser ton réseau local, oui. Mais toutes les machines ne sont pas forcément homogènes ni sur ton LAN. Par exemple, le nom de l'utilisateur·rice, etc.

Tu peux également passer par un fichier JSON et le charger avec « jq » (toujours en bash) avec par exemple, cette notation:


[
    {
        "user": "user1",
        "host": "une_ip",
        "port": "22"
    },
    {
        "user": "user2",
        "host": "un_nom_de_domaine",
        "port": "2222"
    }
]
 



Avec ça tu peux avoir des machines différentes. Et bien sûr, tu peux toujours spécifier la clé SSH dedans si elle est différente, etc.

Dernière modification par Alyve (28-05-2020 11:16:50)


Dell Latitude E7450 • Debian Sid • i3
Fairphone 3 • Lineage OS • Pie
BlogShaarliMastodon

Hors ligne

#6 28-05-2020 12:13:24

spawn63
Membre
Inscription : 28-05-2020

Re : [RÉSOLU] Script bash se connecter sur plusieurs machine via ssh

Je me met dessus, juste pour infos aucun nom de domaine présent sur mon réseau, JSON me parle par contre je ne me suis pas penché dessus. Chose que je vais faire. Pour récapituler @Alyve je bosse sur JSON ensuite je bosse sur le lien que tu m'as donné et je fini par bosser sur @David5647 et la commande sed. Cool, une heure de vélo et je cloque ça! je suis tellement content (tendu) que je vais  aller me défouler  histoire de me détendre et attaquer ça relax, concentré et déterminer.:) smile smile

Hors ligne

#7 28-05-2020 12:21:57

bendia
Chadministrateur
Distrib. : openSUSE Tumbleweed, Stretch
Noyau : Linux 4.9.0-2-amd64
(G)UI : Gnome + Console et un peu Openbox
Inscription : 20-03-2012
Site Web

Re : [RÉSOLU] Script bash se connecter sur plusieurs machine via ssh

Salut smile

Il existe aussi des outils tout fait pour ce genre de chose, style Saltstack wink

Bon, la courbe d'apprentissage est assez longue, mais ça règle ce type de problème simplement smile

Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.

Hors ligne

#8 28-05-2020 13:04:22

saitama-san
Membre
Inscription : 28-07-2019

Re : [RÉSOLU] Script bash se connecter sur plusieurs machine via ssh

ansible ?
je crois qu'il y a a ce qu'il faut en gérant l'inventaire dynamique

En ligne

#9 28-05-2020 13:15:18

spawn63
Membre
Inscription : 28-05-2020

Re : [RÉSOLU] Script bash se connecter sur plusieurs machine via ssh

@bendia merci, FOG est performant dans le domaine il me semble.

Toutes la difficulté pour moi c'est de pouvoir me connecter sur toutes les machines en exécutant le script une fois hmm

Nous dirons que c'est un chalenge smile

Hors ligne

#10 28-05-2020 13:49:46

spawn63
Membre
Inscription : 28-05-2020

Re : [RÉSOLU] Script bash se connecter sur plusieurs machine via ssh

@saitama-san en gérant l'inventaire dynamique?

Hors ligne

#11 28-05-2020 15:22:01

vv222
Administrateur
Lieu : Bretagne
Distrib. : GNU/Linux Debian « Sid »
Noyau : Linux ≥ 5.7 (amd64)
(G)UI : Openbox
Inscription : 18-11-2013
Site Web

Re : [RÉSOLU] Script bash se connecter sur plusieurs machine via ssh

Je te propose pour aider à la réalisation de ce script une petite fonction basée sur ce que tu as partagé dans ton premier message :

get_ip_list() {
    nmap -sP 192.168.10.0-250 192.168.11.0-250 | \
        grep Nmap | \
        cut -c21-34
}



Un exemple d’utilisation :

#/bin/bash

get_ip_list() {
    nmap -sP 192.168.10.0-250 192.168.11.0-250 | \
        grep Nmap | \
        cut -c21-34
}

for ip in $(get_ip_list); do
    echo "IP: ${ip}"
done

exit 0


Jouer sous Debian ? Facile !

Hors ligne

#12 28-05-2020 16:04:49

spawn63
Membre
Inscription : 28-05-2020

Re : [RÉSOLU] Script bash se connecter sur plusieurs machine via ssh

vv222 merci, je vais peut être dire une bêtise mais bon paraît il que des questions bête cela n'existe pas. c'est sûr que là c'est plus ordonné, de plus " get_ip_list ()", tu as créer une variable?

Je vais aller voir ce que fait cette ligne 

for ip in $(get_ip_list); do
    echo "IP: ${ip}"
done"



je ne comprend pas trop

Je bosse dessus et je pense que je vais comprendre mieux en reprenant un cours sur bash que j'ai déjà suivi.

Dernière modification par spawn63 (28-05-2020 16:25:28)

Hors ligne

#13 28-05-2020 17:01:18

spawn63
Membre
Inscription : 28-05-2020

Re : [RÉSOLU] Script bash se connecter sur plusieurs machine via ssh

Après analyse je comprend le tube, maintenant en reprenant la commande for va parcourir les éléments de get_ip_list, donc normalement  elle va parcourir la suite de valeur présente dans get_ip_list, le nom de la variable lui va recevoir  à chaque tours  successivement chacune des valeurs de la liste. en terme si je comprend bien la variable va reprendre un à un a chaque tour les ip ? Pour ce qui est de get_ip_list() est une fonction c'est une syntaxe d’appel?

for ip in $(get_ip_list); do
    echo "IP: ${ip}"
done"

Dernière modification par spawn63 (28-05-2020 17:05:47)

Hors ligne

#14 28-05-2020 17:07:06

David5647
Membre
Distrib. : Debian Bullseye/Sid
Noyau : 5.7.0-2-amd64
(G)UI : KDE/i3wm
Inscription : 27-08-2017

Re : [RÉSOLU] Script bash se connecter sur plusieurs machine via ssh

c'est ça, get_ip_list() est une fonction,
sort de cette fonction les retours des commandes exécutées en son sein.
Soit, ici, une liste des ip (un élément par ligne).

fonction_bidon() {
   echo 1;
   echo 2;
   echo 3 ;
}


fonction_bidon


1
2
3



Lors du for ip in $(get_ip_list)
La fonction est exécutée, et ip prendra successivement (pour chaque tour de boucle) la valeur d'un élément de la liste (une ip)

on pourrait créer une variable intermédiaire qui stockerai la liste:

liste_des_ip=$(get_ip_list)
echo $liste_des_ip

Dernière modification par David5647 (28-05-2020 17:10:37)

Hors ligne

#15 28-05-2020 17:29:52

spawn63
Membre
Inscription : 28-05-2020

Re : [RÉSOLU] Script bash se connecter sur plusieurs machine via ssh

Ok je comprend mieux, maintenant il faut que je trouve la commande qui vas me permettre de me connecter sur chaque machine sans que ces valeurs tourne en boucle et se connecte indéfiniment. Et si je comprend bien le code édité par vv222 je peut très bien créer une boucle en utilisant la commande sed, ce qui donnerais :

get_ip_list() {
nmap -sP 192.168.1.0-255 |  \
grep -e '\([0-9]\{3\}\.\([0-9]\{1,3\}\.\)\{2\}[0-9]\{1,3\}\)' | \
 sed -e 's/.*\([0-9]\{3\}\.\([0-9]\{1,3\}\.\)\{2\}[0-9]\{1,3\}\).*/\1/g'
}

Dernière modification par spawn63 (28-05-2020 17:30:09)

Hors ligne

#16 28-05-2020 17:50:28

David5647
Membre
Distrib. : Debian Bullseye/Sid
Noyau : 5.7.0-2-amd64
(G)UI : KDE/i3wm
Inscription : 27-08-2017

Re : [RÉSOLU] Script bash se connecter sur plusieurs machine via ssh

As tu testé la boucle? Que renvoie  t'elle? Fait t'elle une "boucle infinie"?

Hors ligne

#17 28-05-2020 18:01:06

spawn63
Membre
Inscription : 28-05-2020

Re : [RÉSOLU] Script bash se connecter sur plusieurs machine via ssh

Oui je viens de la tester après l'édition de mon message il n'y à pas de boucle infinie

Dernière modification par spawn63 (28-05-2020 18:01:24)

Hors ligne

#18 28-05-2020 18:12:17

David5647
Membre
Distrib. : Debian Bullseye/Sid
Noyau : 5.7.0-2-amd64
(G)UI : KDE/i3wm
Inscription : 27-08-2017

Re : [RÉSOLU] Script bash se connecter sur plusieurs machine via ssh

On est peut-être à la limite de l'abus de langage quand on parle de boucle, c'est vrai que je me rend plus bien compte =P ,
"on boucle sur la liste", "on itère sur les éléments de la liste", "pour(for) chaque élément de la liste, on fait ça"
Une fois la liste parcourue, ça s'arrête!

J'ai pas spécialement de ressources à te conseiller, tant elles sont nombreuses,
mais je recommande d'aller voir d'un peu plus près ce mécanisme de boucle qui est omniprésent dans le monde de l'informatique
(c'est son but, à l'informatique, faire des truc répétitifs)

Hors ligne

#19 28-05-2020 18:18:34

spawn63
Membre
Inscription : 28-05-2020

Re : [RÉSOLU] Script bash se connecter sur plusieurs machine via ssh

Je vais travailler la dessus tester faire pour améliorer et je vous donne le retour

Dernière modification par spawn63 (28-05-2020 18:29:29)

Hors ligne

#20 28-05-2020 18:36:43

spawn63
Membre
Inscription : 28-05-2020

Re : [RÉSOLU] Script bash se connecter sur plusieurs machine via ssh

David5647 a écrit :

On est peut-être à la limite de l'abus de langage quand on parle de boucle, c'est vrai que je me rend plus bien compte =P ,
"on boucle sur la liste", "on itère sur les éléments de la liste", "pour(for) chaque élément de la liste, on fait ça"
Une fois la liste parcourue, ça s'arrête!

J'ai pas spécialement de ressources à te conseiller, tant elles sont nombreuses,
mais je recommande d'aller voir d'un peu plus près ce mécanisme de boucle qui est omniprésent dans le monde de l'informatique
(c'est son but, à l'informatique, faire des truc répétitifs)



je vais aller voir tous ça, et me parfaire dans ce domaine (script en bash), les boucle la commande for, sed bien approfondir toutes celle dont j'ai besoin dans le but que je me suis fixé


Mais bon ce n'est pas de tout repos  wink, ce soir je suis déjà moins ignorant que ce matin smile

Dernière modification par spawn63 (28-05-2020 18:38:15)

Hors ligne

#21 29-05-2020 13:17:22

spawn63
Membre
Inscription : 28-05-2020

Re : [RÉSOLU] Script bash se connecter sur plusieurs machine via ssh

Bon j'ai bien compris la réponse était ici devant mon nez, donc oui après les éléments que vous m'avez donnés je suis arrivé à me connecter à toutes mes machine le tout étais de revoir un peut bash les boucles etc de réfléchir un peut . Merci à tous et à toutes...

Dernière modification par spawn63 (29-05-2020 13:44:09)

Hors ligne

#22 29-05-2020 15:44:53

vv222
Administrateur
Lieu : Bretagne
Distrib. : GNU/Linux Debian « Sid »
Noyau : Linux ≥ 5.7 (amd64)
(G)UI : Openbox
Inscription : 18-11-2013
Site Web

Re : [RÉSOLU] Script bash se connecter sur plusieurs machine via ssh

Par curiosité, tu pourrais partager avec nous le script auquel tu es arrivé ?

Jouer sous Debian ? Facile !

Hors ligne

#23 29-05-2020 16:09:20

spawn63
Membre
Inscription : 28-05-2020

Re : [RÉSOLU] Script bash se connecter sur plusieurs machine via ssh

spawn63 a écrit :

Bon j'ai bien compris la réponse était ici devant mon nez, donc oui après les éléments que vous m'avez donnés je suis arrivé à me connecter à toutes mes machine le tout étais de revoir un peut bash les boucles etc de réfléchir un peut . Merci à tous et à toutes...




Bonjour vv222,

Je suis en plein test, et recherche afin d'arriver au résultat final que je souhaite.

Sans faute de ma part, je le posterais demain dans la fin de journée, il me manque juste un élément car je dois changer un hostname sans prendre le risque qu'il soit en doublons sur le réseau (sujet posté sur le forum).

pour commencer à répondre à ta question j'ai bien sur extrait les IP, créée une variable intermédiaire et utilisé cette variable pour ma connexion en ssh passphrase qui exécute ensuite les script présent sur les machines.

Il ne me manque plus qu'a parfaire le process smile, ce qui me dérange c'est le manque de maîtrise alors je bosse mon bash. smile

Hors ligne

#24 03-06-2020 07:47:12

spawn63
Membre
Inscription : 28-05-2020

Re : [RÉSOLU] Script bash se connecter sur plusieurs machine via ssh

Bonjour, désolé pour le retard:

Voici mon script :

#!/bin/bash
get_ip_list() {

ssh spawn63@192.168.0.254 nmap -sP 192.168.10.0-250 192.168.11.0-250 | \
    grep Nmap | \
    cut -c21-34 | \
    sed '1d;$d'
}

for ip in $(get_ip_list); do

ssh spawn63@${ip} /home/spawn63/Init
done


exit 0
 


je me connecte via le DHCP 192.168.0.254, je fais le scan sur les deux réseaux, je retiens les lignes Nmap ensuite je coupe les ip, et je retire deux lignes restante suite au scan . ce qui me permet ensuite de me connecter sur tous les postes connectés.
Il tient son rôle sans soucis , merci encore pour votre aide mais bon je dois m'investir plus pour vraiment obtenir le niveau le plus bas de maîtrise. Voila ce script est fait pour executer un script Init présent sur les machines distante

Dernière modification par spawn63 (03-06-2020 07:54:15)

Hors ligne

#25 06-07-2020 18:24:07

cyrille
Adhérent(e)
Distrib. : SID + FreeBSD
(G)UI : Xfce/Openbox
Inscription : 21-06-2020
Site Web

Re : [RÉSOLU] Script bash se connecter sur plusieurs machine via ssh

Sinon il y a l'utilitaire pssh qui fait ce taf
Tu configures un machine comme maitre, renseignes les IP des clients et ensuite tu lances les commandes à déployer
Voici mon pense bête : https://cbiot.fr/dokuwiki/pssh

Dernière modification par cyrille (06-07-2020 18:24:23)

Hors ligne

Pied de page des forums