Équivalent Linux de la communication à distance «un-à-plusieurs» de PowerShell

38

Venant de l’administration Windows, je veux aller plus loin dans Linux (Debian). Une de mes questions brûlantes à laquelle je ne pouvais pas répondre en cherchant sur le Web (je ne l'ai pas trouvé) est la suivante: comment puis-je obtenir la communication à distance dite "un-à-plusieurs" comme dans PowerShell pour Windows?

Pour résumer les bases, je dirais:

Mon point de vue sur Linux:

  • Je peux SSH dans un serveur et tapez ma commande
  • Je reçois le résultat. Pour un environnement de 10 serveurs, je devrais écrire un script (perl / python?) Qui envoie la commande à chacun d’eux?

Mon expérience de Windows:

  1. Je tape ma commande et avec "invoke-command", je peux "envoyer" ceci à un groupe de serveurs (peut-être à partir d'un fichier texte) pour s'exécuter simultanément et obtenir le résultat (en tant qu'objet pour un travail ultérieur).

  2. Je peux même établir plusieurs sessions, la connexion est maintenue en arrière-plan et envoyer de manière sélective des commandes à ces sessions, ainsi que des entrées et des sorties distantes comme je le souhaite.

(J'ai entendu parler du chef, de la marionnette, etc. Est-ce quelque chose comme ça?)


Update 2019:
Après avoir essayé beaucoup - je suggère Rex (voir ce commentaire ci-dessous ) - une configuration facile (en fait, il n’a besoin que de ssh, rien d’autre) et son utilisation (si vous connaissez juste un peu le perl, c’est encore mieux, mais c’est optionnel)
Avec Rex (ify ) vous pouvez faire la commande adhoc et la faire passer à une vraie gestion de configuration (... ce qui signifie: c’est un CM en premier lieu, mais bien aussi pour les tâches ad hoc) Le site web semble obsolète, mais pour le moment (à partir du 01/2019) il est en développement actif et le canal IRC est également actif.

Avec le nouvel openssh de Windows, il y a encore plus de possibilités

tu peux essayer: rex -u user -p password -H 192.168.1.3 -e 'say run "hostname"'

Eli
la source
ssh parallèle peut le faire: serverfault.com/questions/2533/…
rogerdpack
MobaXTerm prend en charge la "multi-exécution" au cours de nombreuses sessions ssh: mobaxterm.mobatek.net/features.html (défilement vers le bas). De plus, si votre environnement de poste de travail principal est Windows, il s'agit également d'un très bon outil pour vous connecter à des machines Linux et bien plus encore.
Kev
avec tmux: :setw synchronize-panes on( unix.stackexchange.com/a/124800/161003 )
eli

Réponses:

50

Sommaire

  • Ansible est un outil DevOps qui remplace puissamment PowerShell.
  • RunDeck comme une interface graphique est pratique
  • Certaines personnes exécutent RunDeck + Ansible ensemble

clusterssh

Pour envoyer des commandes à distance à plusieurs serveurs, pour un débutant, je recommanderais clusterssh

Pour installer clustersshdans Debian:

apt-get install clusterssh

Un autre tutoriel sur clusterssh :

ClusterSSH est un wrapper Tk / Perl autour des outils Linux standard tels que XTerm et SSH. En tant que tel, il fonctionnera sous à peu près tout système d'exploitation compatible POSIX où les bibliothèques existent - je l'ai déjà exécuté sous Linux, Solaris et Mac OS X. Il nécessite les bibliothèques Perl Tk (perl-tk sous Debian ou Ubuntu) et X11 :: Protocol (libx11-protocole-perl sur Debian ou Ubuntu), en plus de xterm et OpenSSH.

Ansible

Ansible est une alternative très intéressante à Puppet pour la gestion à distance de plusieurs systèmes d’administration . Il est plus maigre et ne nécessite pas d'agents distants dédiés car il fonctionne sur SSH (il a également été acheté par RedHat).

Les Playbooks sont plus élaborés que les options en ligne de commande.

Cependant, pour commencer à utiliser Ansible, vous avez besoin d’une installation simple et de la configuration du fichier texte de la liste des clients.

Ensuite, pour exécuter une commande sur tous les serveurs, procédez comme suit:

ansible all -m command -a "uptime"

La sortie est également très bien formatée et séparée par règle / serveur et, lors de son exécution en arrière-plan, peut être redirigée vers un fichier et consultée ultérieurement.

Vous pouvez commencer avec des règles simples, et l’utilisation d’Ansible deviendra de plus en plus intéressante au fur et à mesure que vous grandissez sous Linux, et votre infrastructure s’agrandit. En tant que tel, il fera beaucoup plus que PowerShell.

A titre d'exemple, un Playbook très simple pour mettre à niveau les serveurs Linux que j'ai écrit:

---
- hosts: all
  become: yes
  gather_facts: False
  tasks:
   - name: updates a server
     apt: update_cache=yes
   - name: upgrade a server
     apt: upgrade=full

Il a également défini de nombreux modules qui vous permettent d’écrire facilement des stratégies complètes.

Index de module - Documentation Ansible

Il dispose également d'un centre officiel / réseau "social" de référentiels intéressant dans lequel rechercher les politiques déjà définies par la communauté. Ansible Galaxy

Ansible est également largement utilisé et vous trouverez de nombreux projets dans github, comme celui de moi pour l’ installation de FreeRadius .

Bien qu'Ansible soit un framework open source gratuit, il possède également une interface de panneau Web payante, Ansible Tower, bien que la licence soit relativement onéreuse.

De nos jours, après l’achat de RedHat, Tower propose également la version open source AWX .

En prime, Ansible est également capable d’administrer des serveurs Windows, bien que je ne l’aie jamais utilisé pour cela.

Il est également capable d’administrer des équipements réseau (routeurs, commutateurs et pare-feu), ce qui en fait une solution très intéressante en tant que solution clé en main pour l’automatisation.

Comment installer Ansible

Rundeck

Encore une fois, pour un framework distant plus facile à utiliser, mais moins puissant que Ansible, je recommande Rundeck .

Il s’agit d’une interface graphique multi-utilisateurs / de connexion très puissante dans laquelle vous pouvez automatiser une grande partie de vos tâches quotidiennes courantes et même offrir des vues affaiblies aux systèmes d’assistance ou aux personnes du service d’assistance.

Lors de l'exécution des commandes, il vous donne également des fenêtres avec une sortie ventilée par serveur / tâche.

Il peut exécuter plusieurs tâches en arrière-plan de manière transparente et vous permet de voir le rapport et de le générer ultérieurement.

image de retour

Comment installer RunDeck

Veuillez noter que des personnes utilisent Ansible + RunDeck en tant qu'interface Web. tous les cas ne sont pas appropriés pour cela.

Il va sans dire que l’utilisation de Ansible et / ou de RunDeck peut être interprétée comme une forme ou une partie de la documentation sur l’infrastructure, et qu’elle permet, au fil du temps, de reproduire et d’améliorer les actions / recettes / Playbooks.

Enfin, en ce qui concerne un serveur de commandes central, je voudrais en créer un juste pour la tâche. En réalité, le terme technique est une boîte à sauts. Les 'boîtes de saut' améliorent la sécurité, si vous les configurez correctement .

Rui F Ribeiro
la source
1
Ansible est une excellente solution par rapport à un script ou à un utilitaire qui diffuse simplement une commande à plusieurs serveurs SSH. Ansible fait cela (et convient mieux à cette fin que Puppet ou Chef), mais vous donne également la possibilité d’atteindre votre objectif d’une meilleure manière, par exemple en utilisant un module intégré pour installer quelque chose de façon idempotée au lieu de simplement envoyer la commande install et en espérant le meilleur.
JBentley
12

Vous pouvez également utiliser pssh(ou parallel-ssh), qui est un client SSH qui se connecte à une liste d'hôtes et exécute la commande sur tous les hôtes en parallèle:

$ parallel-ssh -i -H "host1 host2" uname -a
[1] 11:37:12 [SUCCESS] host2
Linux host2 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[2] 11:37:12 [SUCCESS] host1
Linux host1 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
morxa
la source
11

Peut-être que vous pouvez atteindre votre objectif avec une simple fonction zsh (bash). Supposons que vous avez des serveurs l61 l62 l63 et que vous devez souvent exécuter une commande sur eux:

function run_on_cluster()
{
    (for srv in l61 l62 l63;
    do
        echo "ssh $srv $1";
    done) | parallel --gnu
}

Donc, dans la ligne de commande:

$ run_on_cluster "uname -r"
2.6.32-279.el6.x86_64
2.6.32-279.el6.x86_64
2.6.32-504.23.4.el6.x86_64
Sergei Kurenkov
la source
5
Je recommanderais d’imprimer le nom des serveurs avant leur sortie. Exécuter le script en parallèle apporte également d’autres bizarreries, comme tâtonner la sortie du script - des mesures supplémentaires doivent être prises pour préserver l’activité de la sortie. L'exécution de chaque tâche au premier plan offre également la possibilité d'une interaction minimale des entrées.
Rui F Ribeiro
3

Si vous utilisez KDE, voici une autre méthode.
- Ouvrez une fenêtre Konsole.
Pour chaque serveur avec lequel vous souhaitez communiquer:
- ouvrez un onglet
- établissez une connexion SSH avec le serveur
Dans le menu "Edition", sélectionnez "Copier l'entrée" sur "Tous les onglets".

Chaque commande que vous entrez dans cet onglet sera copiée sur tous les serveurs.
Vous pouvez passer d'un onglet à l'autre pour voir les différents résultats.

Note: mes étiquettes de menu (entre guillemets) peuvent être fausses car je n'utilise pas de version anglaise de KDE

utilisateur161210
la source
1

GNU parallèle

Il permet de créer des profils simples avec des paramètres enregistrés. Vous pouvez ainsi créer un profil, "prod", qui contiendra une liste de serveurs et des commutateurs communs. Il vous suffira ensuite d'ajouter la commande de votre choix, et vous serez prêt. le serveur et les supprimer automatiquement à la fin, ce qui est très pratique pour les scripts encore plus volumineux et très rapide.

Le seul problème est qu'il a tellement d'options;) Mais la documentation inclut également de nombreux exemples, vous pouvez donc les regarder au début.

alkuzad
la source
2
Bonjour, Bienvenue sur Linux et Linux. Quelqu'un a déjà donné un script en utilisant gnu-parallel a un exemple. Je vous conseille de regarder autour de vous, des réponses plus élaborées sont appréciées et vous donneront plus de points.
Rui F Ribeiro
1
@RuiFRibeiro désolé je n'ai pas remarqué, SO bogues d'applications Android avec des boîtes de code et je ne pouvais pas voir la plupart du contenu (il génère un espace blanc). Vous avez mentionné que gnu-parallel tâtonnait la sortie - il peut l'écrire dans l'ordre mais vous devez le lui dire :)
alkuzad
Oui, je ne le connais pas bien, mais je le soupçonne déjà. C’est pourquoi la réponse doit être améliorée. Merci. Rien ne vous empêche d'écrire une meilleure réponse autour de cela, cependant, pour les commentaires, je vous recommande de commenter dans cette réponse.
Rui F Ribeiro
1

Je veux mentionner "Rex" ici aussi: https://www.rexify.org/

C'est un outil génial qui utilise perl + ssh (authentification utilisateur / mot de passe ou clé) et parce que perl est installé sur tous les systèmes Linux (?!), Je trouve qu'il semble plus naturel de l'utiliser (il présente certaines similitudes avec Ansible & Co.)

vous pouvez exécuter des commandes adhoc sur plusieurs serveurs à la fois (server1, server2, server ... - après avoir configuré l'authentification, ou bien utilisez les paramètres -p / -u et -s / -S pour l'exécution sudo de la commande):

$ rex -H "server[1..3]" -e 'say run "uptime"'

ou créez un fichier dans lequel vous spécifiez différentes "tâches" et appelez-les à partir de là

$ rex -f myConfigFile.rex uptime

Il peut être installé via des référentiels ou même avec perls cpan (ou cpanm Rex) et sa configuration initiale est simple, voir:
- https://www.rexify.org/ ou
- https://www.rexify.org/docs/guides/ start_using__r__ex.html et
- http://www.admin-magazine.com/Archive/2014/21/First-steps-in-IT-automation-by-Rex

Eli
la source