====== pssh // parallel-ssh ====== * Objet : Utiliser parallel-ssh / pssh * Niveau requis : {{tag>avisé}} * Commentaires : Administration réseau * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) * Suivi :{{tag>à-placer}} * Création par [[user>cyrille]] 02/09/2020 * Testé par [[user>cyrille]] le <02/09/2020> * Amélioré par [[user>smolski]], [[user>captnfab]] * Commentaires sur le forum : [[https://debian-facile.org/post.php?fid=26 | Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) ===== Introduction ===== **pssh** est un outil en ligne de commande pour exécuter **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 Très utile puisque que sur un parc de PC, vous mettez à jour l'ensemble du parc depuis une seule machine. ===== Configurer les postes client ===== Tâches à réaliser sur chaque client. Écrire un script d'automatisation afin d'alléger cette tâche. ==== Installer le paquet openssh-server ==== apt-get install openssh-server Chaque client possédera donc son propre serveur ssh. ==== configurer openssh-server ==== [[doc:reseau:ssh:tp-sftp-via-openssh-server|Configurer le serveur ssh]] pour qu'il accepte les connexions root et les autorisations par clefs et non mot de passe nano /etc/ssh/sshd_config Mettre à jour les lignes suivantes avec ces entrées Prohibit-password yes PubkeyAuthentication yes Démarrer le service ssh ou le redémarrer service ssh start service ssh restart Les clients sont prêts à l'emploi ===== Configurer la machine maître ===== ==== Installer pssh ==== apt-get install pssh ==== pssh / parallel-ssh ==== Clé assymétriques dans le détail, voir : \\ [[doc:reseau:ssh:client#par-cles-asymetriques | Cle assymétrique - 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 ssh-keygen ls -l .ssh/ 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 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 ==== 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. ===== 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. ssh-agent bash ssh-add Enter passphrase for /xxxx/.ssh/identity: ==== Utiliser parallel-ssh ==== Exemple, option -i parallel-ssh -i -h /etc/ssh/pssh_host/pssh_hosts uname -a [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 Autre exemple, **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_hosts uname -a [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 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 Exemple, mise à jour à distance parallel-ssh -i -h /etc/ssh/pssh_host/pssh_hosts apt-get update parallel-ssh -i -h /etc/ssh/pssh_host/pssh_hosts apt-get upgrade ==== 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