PSSH (parallel-ssh)

Pssh est un outil en ligne de commande pour exécuter des commandes unix via ssh en parallèle sur plusieurs hôtes. Ses spécialités comprennent:

  • Envoi de données à tous les clients
  • Saisie unique d'un mot de passe pour ssh
  • Enregistrement de la sortie dans des fichiers ou visionnage direct
  • Automatisation des tâches sysadmin telles que l'application de correctifs aux serveurs, les mises à jour, l'installation de paquets, la configuration,…
  • Envoi de fichiers à tous les serveurs
  • Gestion des processus
  • Compatible avec tous les Linux, Unix et freeBSD

Ce logiciel est très utile sur un parc de PC, puisque vous mettez à jour l'ensemble du parc depuis une seule machine.

Configurer les postes clients

Il est possible d'écrire un script d'automatisation afin d'alléger cette tâche.
Il est déconseillé de permettre la connexion ssh au compte root

Sur chaque postes clients il s'agira de :

  • Installez le serveur SSH. Chaque client possédera donc son propre serveur ssh.
  • Configurer ces serveurs ssh pour qu'il accepte les connexions root et les autorisations par clefs et non mot de passe :
  • Démarrer ou redémarrer le service ssh. Il faut généralement les droits administrateur.
    • Par exemple
      sudo service ssh start

      ou

      sudo service ssh restart

Les clients sont prêts à l'emploi

Configuration de la machine maître

Sous debian sid, l'utiliaire pssh s'appelle parallel-ssh (sous d'autres distributions c'est simplement pssh).

Ici nous utiliserons parallel-ssh par défaut (adapter à votre configuration)

Construire sa clef , sauf si on en a déjà une (compte $USER, non en root)

ssh-keygen

Vérifiez par

ls -l .ssh/ 

qui doit vous retourner

total 12
-rw-------1 ragnarok cyrille 1876 juin  26  2019 id_rsa
-rw-r--r-- 1 ragnarok cyrille  397 juin  26  2019 id_rsa.pub
-rw-r--r-- 1 ragnarok cyrille 2220 mars  14 16:42 known_hosts

La clé est créée, on la garde sous le coude ;)

Ce fichier renferme la liste des hosts vers lesquels les commandes seront envoyées.

Ici, cette liste sera stockée dans /etc/ssh/pssh_host mais vous pouvez créer un fichier de ce type où vous le souhaitez (souvent, le fichier ~/.pssh_hosts_files est utilisé)

Créer un fichier contenant les hosts

mkdir /etc/ssh/pssh_host

Modifiez le ensuite. Par exemple avec nano si vous êtes sur une console)

nano /etc/ssh/pssh_host/pssh
###Mettre les adresses IP des serveurs à administrer ici.
root@192.168.0.11
root@192.168.0.12
root@192.168.0.23
root@192.168.0.43
...

Si vous souhaitez utiliser les noms des machines plutôt que leurs adresses IP, il faudra modifier et adapter le fichier /etc/hosts

Toujours en mode $USER

ssh-copy-id root@192.168.0.11
ssh-copy-id root@192.168.0.12
ssh-copy-id root@192.168.0.23
ssh-copy-id root@192.168.0.43
...

Autant de fois que d'entrées dans votre fichier /etc/ssh/pssh_host/pssh

ssh-copy-id root@192.168.0.43
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ragnarok/.ssh/id_rsa.pub"
The authenticity of host '192.168.0.43 (192.168.0.43)' can't be established.
ECDSA key fingerprint is SHA256:2SC8wDSd7m7UrqCRnmz6jsY+6K9GL9zkMPQZGxEQM6k.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.0.43's password:
Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.0.43'"
and check to make sure that only the key(s) you wanted were added.

FIXME root@192.168.0.43's password on ne doit pas saisir le mdp de la machine distante/cliente ?

Déployer pssh

Utilisez ssh-agent pour vous authentifier automatiquement (avec un nom de shell comme argument pour que les variables d'environnement de l'agent soient définies dans ce nouveau shell). Ajoutez la clé avec ssh-add et tapez votre mot de passe une seule fois. FIXME pas forcément le mot de passe de la machine mais une mot de passe nouvellement choisi non ?

ssh-agent bash
ssh-add
Enter passphrase for /xxxx/.ssh/identity:

L'option -i

parallel-ssh -i  -h /etc/ssh/pssh_host/pssh uname -a

Répondra

[1] 15:21:04 [SUCCESS] root@192.168.0.11
FreeBSD asgard-freeBSD 12.0-RELEASE-p13 FreeBSD 12.0-RELEASE-p13 GENERIC  amd64
[2] 15:21:04 [SUCCESS] root@192.168.0.43
Linux Tinuviel-debianStable 4.19.0-6-amd64 #1 SMP Debian 4.19.67-2+deb10u2 (2019-11-11) x86_64 GNU/Linux

On remarque ici l'option -i qui permet de visualiser ce que retourne le terminal ssh des postes clients

L'option -o

Pour rediriger la sortie ssh des clients vers un fichier, on utilisera l'option -o

parallel-ssh -o /tmp/uname  -h /etc/ssh/pssh_host/pssh uname -a

Répondra

[1] 15:22:47 [SUCCESS] root@192.168.0.11
[2] 15:22:48 [SUCCESS] root@192.168.0.43

Et pour visualiser les sorties.

cat /tmp/uname/root@192.168.0.11 /tmp/uname/root@192.168.0.43

Répondra

FreeBSD asgard-freeBSD 12.0-RELEASE-p13 FreeBSD 12.0-RELEASE-p13 GENERIC  amd64
Linux Tinuviel-debianStable 4.19.0-6-amd64 #1 SMP Debian 4.19.67-2+deb10u2 (2019-11-11) x86_64 GNU/Linux

Mise à jour à distance

parallel-ssh -i  -h /etc/ssh/pssh_host/pssh apt update
parallel-ssh -i  -h /etc/ssh/pssh_host/pssh apt full-upgrade

:!: Attention ici il s'agit de la commande apt, à adapter selon votre gestionnaire de paquet :!:

Copier des fichiers vers les clients

Syntaxe

parallel-scp -h /fichier_de_conf_pssh source destinatire

Exemple

parallel-scp  -h /etc/ssh/pssh_host/pssh_hosts  $HOME/test.txt /tmp/

Tuer des processus sur les postes clients

Syntaxe

parallel-nuke -h /fichier_de_conf_pssh nom_du_processus

Exemple

parallel-nuke  -h /etc/ssh/pssh_host/pssh_hosts  nginx

cyrille AT cbiot DOT fr

  • pssh.txt
  • Dernière modification: Le 14/12/2023, 15:51
  • par percherie