{{tag>administration serveur ssh}} ---- ====== 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 : * [[:tutoriel:comment_installer_un_paquet|Installez]] le **[[:ssh?#installation_du_serveur_ssh|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 : * avec les [[:sudo|droits d'administration]], [[:tutoriel:comment_modifier_un_fichier|modifiez le fichier]] **/etc/ssh/sshd_config** pour mettre à jour les lignes suivantes avec ces entrées : PermitRootLogin yes PubkeyAuthentication yes * Démarrer ou redémarrer le [[:services|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 ====== ===== Installer pssh ===== [[:tutoriel:comment_installer_un_paquet|Installez]] [[apt>pssh]] ===== pssh / parallel-ssh ===== 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) ===== Utiliser une paire de clef publique/privée pour l’identification ssh ===== 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 ;) ===== Le fichier de configuration du poste maître ===== 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** ===== Exporter la clef publique sur les clients ===== 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 ====== ===== Initialiser 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: ===== Utiliser parallel-ssh ===== ==== 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 ---- //[[:utilisateurs:cyrille|cyrille]] AT cbiot DOT fr//