
Distributed Shell
DSH, le dancer's shell exécute des commandes bash distante sur plusieurs machines en même temps. C'est drôlement bien parce que si on y réfléchi bien, on peut en une fraction de seconde atomiser tout un groupe de serveur en une validation de cli et ainsi pleurer des longs mois pour avoir était aussi con !!! ok je sors. Vous l'avez compris il faut quand même un minimum pour se simplifier la tache, par exemple une connexion en ssh par certificats et un obligatoire, être résonnable dans les commandes envoyés et surtout comme vous l'avez compris bien réfléchir avant de valider.
Mise en place
Un seul paquet à installer qui est dsh.
Description: « dancer's shell », ou shell distribué Exécute une commande spécifiée sur un groupe d'ordinateurs en utilisant des méthodes de shell distants telles que rsh ou ssh.
apt install dsh
Il est vrai bien sur qu'il n'y a rien a faire sur les clients du moins les serveurs , puisque il va de soit que dans le but d’être ultra efficient, nous avons déjà au préalable confirguré le ssh et le client ssh-agent.
Action
Il faut faire un p'tit tour dans le fichier de configuration /etc/dsh/dsh.conf pour :
changer le shell en ssh au lieu de rsh ( peu sécurisé). afficher le nom c'est plus mieux.
On ajoute tout ces p'tites machines / serveurs dans le fichier machines.list. Sauf que notre certificat ssh est en lien avec l'utilisateur root donc on prefixe nos machines par root@ Ce qui donne :
root@pihole
root@jeedom
root@proxmox
root@www
Petit test avec la commande ( oui je sais le classique )
dsh -a uptime
Adding all machines to the list
--- Executing on root@octopi.7ici.website
... Waiting for process to end with waitpid
DUMPing parameters passed to llexec
[-l] [root] [octopi.7ici.website] [uptime]
root@octopi.7ici.website: ssh: connect to host octopi.7ici.website port 22: No route to host
--- Executing on root@proxmox.7ici.website
... Waiting for process to end with waitpid
DUMPing parameters passed to llexec
[-l] [root] [proxmox.7ici.website] [uptime]
root@proxmox.7ici.website: .----------------. .----------------. .----------------. .----------------.
root@proxmox.7ici.website: | .--------------. || .--------------. || .--------------. || .--------------. |
root@proxmox.7ici.website: | | _______ | || | _____ | || | ______ | || | _____ | |
root@proxmox.7ici.website: | | | ___ | | || | |_ _| | || | .' ___ | | || | |_ _| | |
root@proxmox.7ici.website: | | |_/ / / | || | | | | || | / .' \_| | || | | | | |
root@proxmox.7ici.website: | | / / | || | | | | || | | | | || | | | | |
root@proxmox.7ici.website: | | / / | || | _| |_ | || | \ `.___.'\ | || | _| |_ | |
root@proxmox.7ici.website: | | /_/ | || | |_____| | || | `._____.' | || | |_____| | |
root@proxmox.7ici.website: | | | || | | || | | || | | |
root@proxmox.7ici.website: | '--------------' || '--------------' || '--------------' || '--------------' |
root@proxmox.7ici.website: '----------------' '----------------' '----------------' '----------------'
root@proxmox.7ici.website: 20:44:40 up 315 days, 3:50, 1 user, load average: 1.00, 1.00, 1.00
--- Executing on root@pihole.7ici.website
... Waiting for process to end with waitpid
DUMPing parameters passed to llexec
[-l] [root] [pihole.7ici.website] [uptime]
root@pihole.7ici.website: 20:44:41 up 224 days, 6:46, 1 user, load average: 1,00, 1,00, 1,00
--- Executing on root@www.7ici.website
... Waiting for process to end with waitpid
DUMPing parameters passed to llexec
[-l] [root] [www.7ici.website] [uptime]
root@www.7ici.website: 19:44:41 up 19 days, 22:45, 0 users, load average: 1.00, 1.00, 1.00
etc....
Donc un fichier peu lisible, dans le fichier de configuration on passe en verbose = 0, il restera toujours les bannieres du ssh, mais après tout c'est ce que l'on veut.
Les groupes
Pour y voir un peu plus clair, on va faire des groupes, comme par exemple les ct, les debians, les physiques etc. donc dans group on ajoute un fichier ct avec
ce qui donne
dsh -g ct lsb_release -a
root@pihole.7ici.website: Distributor ID: Ubuntu
root@pihole.7ici.website: Description: Ubuntu 20.10
root@pihole.7ici.website: Release: 20.10
root@pihole.7ici.website: Codename: groovy
root@pihole.7ici.website: No LSB modules are available.
root@www.7ici.website: No LSB modules are available.
root@www.7ici.website: Distributor ID: Ubuntu
root@www.7ici.website: Description: Ubuntu 22.04.2 LTS
root@www.7ici.website: Release: 22.04
root@www.7ici.website: Codename: jammy
Alors encore une fois, on est sage, faire des mise a jour en volume des systèmes reste une mauvaise idée ... prendre des risques avec des manipulations de fichiers hasardeuse est une très mauvaise idée ... je sais même pas pourquoi j'ai ressortit ce dsh !