Automatisation - Freyens
Home Informatique Projets CV WOT Mmm J'aime Coup de gueule Famille Web Radio Belge B&M Art-NFT

C'est une pub! Ce thême est basé sur w3 css.

Oui vous êtes capable de modifier ce thême

Cool? Oui, avec plein d'exemples faciles à comprendre et à modifier.

Aller sur W3.CSS Tutorial c'est en anglais mais google peux traduire les pages.

Automatisation

La curiosité n’est pas un vilain défaut mais une qualité fondamentale.

< ^ >

On doit apprendre à faire travailler la machine à notre place.

On va donc créer un fichier contenant les différentes ip des machines qu'il y a en classe en utilisant vim.

vim

Vim est un éditeur de texte assez puissant, il peut gérer la coloration syntaxique, il a de nombreuses possibilités

Vim a deux mode un mode édition et un mode commande vous passez en mode commande en appuyant sur [esc] ou [ctrl]+c au choix,

vim machines.lst

i pour passer en mode insertion

on tape la partie qui ne change pas, dans notre cas 192.168. puis on appuye sur [esc] ou [ctrl]+c, puis yy pour copier dans le presse papier interne de vim, si vous avez 6 machines à encoder comme vous avez déjà tapez une première partie, on fera 5p, il copiera 5 fois le contenu mis dans le presse papier. Ensuite on appuye sur i pour repasser en mode insertion, via les flèches on se positionne où l'on doit ajouter la fin de l'adresse. Une fois terminé, on appuye sur en fonction de votre cas :

[esc]:w pour sauver

[esc]:q! pour quitter sans sauver

[esc]:wq pour sauver et quitter

Pour les curieux et curieuses -> truc & astuces

Autre manière

echo -e "ip 1\nip 2\nip 3\n" > machines.lst
cat > machines.lst
ip 1
ip 2
ip 3

[ctrl]+d pour finir la liste et revenir au terminal, on écrit de vrai ip pas ip 1, ip 2, ip 3.

Maintenant qu'on a une liste de machine, l'automation va pouvoir commencer. Nous avons fait une liste mais notre adresse ip, n'est pas dans la liste donc en cas de partage, notre adresse manque, on peut facilement la rajouter

ip a | grep -o '192.168.[0-9]*.[0-9]*' | head -n 1 >> machines.lst

Pourquoi >> et pas > ?
Et bien avec un seul > on crée le fichier s'il existe sont contenu est supprimer, avec >> le contenu est ajouter au fichier si celui-ci existe, s'il n'existe pas le fichier est créer.

Maintenant notre liste est complète et partageable.

#!/bin/bash
for machine in $(cat machines.lst)
do
    echo "$machine =========================="
    myip=$(ip a | grep -o '192.168.[0-9]*.[0-9]*' | head -n 1)
    if [ "$ip" != "$machine" ] ; then
        ssh $USER@$machine -- $@
    fi
done

Pendant le cours je me suis trompé, comme quoi personne n'est parfait $* -> $@, quoique est-ce vraiment ça l'erreur ?!. Et bien non, les deux formes sont valable.
L'erreur est ailleurs, dans la page de manuelle en français de bash on peut trouver la réponse, avant de faire quoi que ce soit ssh va commencer par tester, utiliser les paramètres quoi lui passe. Sauf que dans notre cas, les paramètres ne sont pas destiné à ssh mais bien à la commande que l'on va passer en argument, exemple : "./scmd ls -l", le -l ne concerne pas ssh mais bien le ls, que l'on veux exécuter sur toutes les machines. On devra donc modifier le script et transformer la commande "ssh $USER@$machine $@" en "ssh $USER@$machine -- $@"

Une boucle pour chaque machine se trouvant dans le fichier machines.lst, On affiche une ligne avec le nom de la machine et des traits pour voir plus facilement chaque boucle, on place dans une variable $myip le résultat obtenu par ip a, filtrer, ensuite on teste si la valeur se trouvant dans myip est différente du contenu se trouvant dans la variable $machine, si c'est le cas on exécute la commande ssh avec son id sur la machine et on passe la commande que l'on veut exécuter sur chaque machine.

Copier le script puis entrer la commande suivante, puis coller le script dans le cat

Puis faite [ctrl]+d

cat > scmd

Si tout c'est bien passer le script se trouve dans scmd. On vérifie

cat scmd

On peut aussi utiliser vim, se placer en insertion via i,puis coller le contenu du script.

Ou le taper si le collage ne fonctionne pas.

Votre script n'est pour l'instant qu'un simple fichier texte.

chmod +x scmd

Maintenant c'est un exécutable on aurait pu mettre u+x pour être le seul à pouvoir l'exécuter, ou ug+x pour que le groupe et vous vous puissiez l'exécuter.

Qui est présent sur chaque machine sauf la votre ?

./scmd who

Et pourquoi pas la mienne ?

Ok alors éditons le script scmd via vim

#!/bin/bash
for machine in $(cat machines.lst)
do
    echo "$machine =========================="
    myip=$(ip a | grep -o '192.168.[0-9]*.[0-9]*' | head -n 1)
    if [ "$ip" != "$machine" ] ; then
        ssh $USER@$machine $@
    else
        $@

    fi
done

Relancez la commande précédente

./scmd who

Maintenant la commande va s'effectuer sur votre machine mais ce n'est pas vraiment le but recherché.

#!/bin/bash
for machine in $(grep -v '#' machines.lst)
do
    echo "$machine =========================="
    myip=$(ip a | grep -o '192.168.[0-9]*.[0-9]*' | head -n 1)
    if [ "$ip" != "$machine" ] ; then
        ssh $USER@$machine $@
    else
        $@

    fi
done

< ^ >