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 est un terminal virtuel qui a pour particularité de pouvoir 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 !
« If 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 :-D

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 :

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. :-D

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
  • technique/tips/broadcast.txt
  • de qduchemi