**Ceci est une ancienne révision du document !**
Effectuer une opération sur l'ensemble des machines
Motivation
On a parfois besoin d’effectuer la même opération sur toutes les machines : installer un paquet, le configurer, redémarrer un service, etc.
Se connecter un à un aux machines est assez pénible, fastidieux, et plus propice aux erreurs. De plus, on utilise pas Ansible, qui permettrait de résoudre le problème assez facilement.
Je te propose ici une solution simple pour automatiser la connexion à toutes les machines, et taper une seule fois les commandes.
Note:
Il existe plein d’autres solutions : pssh
, cssh
, etc. Libre à toi de choisir celle qui te convient !
Terminator et layout personnalisé
Terminator est un terminal virtuel qui a pour particularité de scinder la fenêtre en plusieurs sous-terminaux, de créer des groupes de terminaux où les commandes sont répliquées, et est très personnalisable.
En général, il suffit d’installer le paquet terminator
sur ta machine.
A Savoir:
La configuration se trouve dans le fichier ~/.config/terminator/config
, mais est aussi accessible via un clic droit → préférences dans le terminal.
Configurer le layout
Ouvre un terminal, puis utilise une combinaison des raccourcis Ctrl+Shift+o
et Ctrl+Shift+e
pour ouvrir des sous terminaux, jusqu’à ce que la disposition te convienne et qu’il y en ait aucun que de machines (à ce jour, 7 : alice
, bob
, pica01
, pica02
, pica01-test
, monitoring
, media
). Exemple :
Ensuite, on se rend dans les paramètre de Layout, et on en rajoute un nouveau. Terminator va automatiquement récupérer la configuration des terminaux ouverts, et l’intégrer dans le nouveau profil, il n’y a rien à faire.
Attention:
Si d’autres instances de Terminator sont ouvertes, elles seront également prises en compte, il vaut mieux les fermer.
Exemple :
On renomme le profil (exemple picasoft
), et on appuie sur save
.
On retrouve bien les 7 terminaux. Pour chacun d’entre eux, on va indiquer la commande à exécuter, en l’occurrence une connexion SSH sur les machines. Exemple :
Attention:
Ne pas cliquer sur save
! f you use the Save button in the Layouts after spending time setting the items below, you will lose these stored values (custom command, working directory) First get the layout right, then edit these within the Layouts tab of the Preferences Window. You do not need to use the Save button to keep these settings. There is potential to improve this behaviour, as it is a little unintuitive. Source
On change la machine pour chaque terminal, puis on ferme.
Pour charger le layout, il y a deux solutions :
- Lancer
terminator
, clique droit → Layout → picasoft - Lancer
terminator -l picasoft
Attention:
Un Ctrl+C fermera tout simplement le terminal, car la commande ssh
est alors terminée.
A Savoir:
Si tu versionnes tes fichiers de configuration, n’hésite pas à rajouter celui de Terminator, ainsi tu profiteras de ce layout sur toutes tes machines
Envoyer des commandes à tous les terminaux
Normalement, à ce stade, on te demande de rentrer la passphrase de ta clé SSH. Pour éviter de la rentrer 7 fois, on va utiliser une fonctionnalité très pratique de Terminator : le broadcast. Chaque lettre est reproduite sur l’ensemble des terminaux. Pour l’activer, clique sur l’icône de terminaux dans la barre de titre d’un des terminaux, puis choisis Broadcast all
.
Note:
Il est aussi possible de mettre tous les terminaux dans un groupe (Group All in Tab
) puis de broadcaster pour ce groupe uniquement. Sinon, le broadcast sera effectif dans tous les autres terminaux ouverts, même dans une autre fenêtre.
Maintenant, tu peux rentrer ta passphrase et tester la puissance de cette configuration en lançant une commande sur toutes les machines, par exemple hostname
:
Un grand pouvoir...
Important:
C’est très dangereux de lancer des commandes sur l’ensemble des machines de production, simultanément. Assure-toi d’avoir bien vérifié et de suivre les recommendations qui suivent.
- Assure toi que toutes les machines tournent sur le même OS, c’est plus sûr. Ici, tout est en Debian 10, ça le fait.
- Utilise tmux pour éviter qu’une interruption de la connexion SSH ne vienne tout casser
- Regarde les logs de chaque commande tapée pour l’ensemble des fenêtres. Si une des commandes foire et que tu ne t’en rends pas compte, ça peut vite aller à la catastrophe, notamment lors de mises à jour…
- S’il y a une erreur sur l’une des fenêtres, désactive le broadcast et règle le problème sur la fenêtre en question
Important:
Toute commande en sudo
doit être vérifiée mille fois.
Flemme de configurer à la main ?
Voilà la section de mon fichier de config. Remplace avec ton login et ça devrait rouler !
- snippet.toml
[layouts] [[default]] [[[child0]]] type = Window parent = "" order = 0 position = 0:55 maximised = False fullscreen = False size = 3200, 1691 title = chosto@chosto: ~ [[[terminal0]]] type = Terminal parent = child0 order = 0 profile = default uuid = 498cd758-0193-4b69-b40a-9743e0b080a7 [[picasoft]] [[[child0]]] type = Window parent = "" order = 0 position = 0:55 maximised = False fullscreen = False size = 3200, 1691 title = chosto@chosto: ~ last_active_term = a2704452-a79d-4da7-8e26-02006a653f4b last_active_window = True [[[child1]]] type = VPaned parent = child0 order = 0 position = 843 ratio = 0.5 [[[child2]]] type = VPaned parent = child1 order = 0 position = 419 ratio = 0.5 [[[child3]]] type = HPaned parent = child2 order = 0 position = 1598 ratio = 0.5001564945226917 [[[terminal4]]] type = Terminal parent = child3 order = 0 profile = default uuid = 498cd758-0193-4b69-b40a-9743e0b080a7 command = ssh qduchemi@bob.picasoft.net [[[terminal5]]] type = Terminal parent = child3 order = 1 profile = default uuid = be52c063-b71d-48d9-bf5f-1087e8a5021e command = ssh qduchemi@alice.picasoft.net [[[child6]]] type = HPaned parent = child2 order = 1 position = 1598 ratio = 0.5001564945226917 [[[terminal7]]] type = Terminal parent = child6 order = 0 profile = default uuid = 459f8f25-6f92-46a7-86bc-a591f86cbfb8 command = ssh qduchemi@media.picasoft.net [[[terminal8]]] type = Terminal parent = child6 order = 1 profile = default uuid = 0da29a47-442a-42e6-bfeb-5519e11781cc command = ssh qduchemi@monitoring.picasoft.net [[[child9]]] type = HPaned parent = child1 order = 1 position = 1598 ratio = 0.5001564945226917 [[[child10]]] type = VPaned parent = child9 order = 0 position = 421 ratio = 0.5 [[[terminal11]]] type = Terminal parent = child10 order = 0 profile = default uuid = a2704452-a79d-4da7-8e26-02006a653f4b command = ssh qduchemi@pica02.picasoft.net [[[terminal12]]] type = Terminal parent = child10 order = 1 profile = default uuid = c949ff4d-c156-4444-b8f6-5ccda3a39a0a command = ssh qduchemi@pica01-test.picasoft.net [[[terminal13]]] type = Terminal parent = child9 order = 1 profile = default uuid = c63ef1d8-085d-4b7a-8e1d-89bc09a2d5bb command = ssh qduchemi@pica01.picasoft.net