web-dev-qa-db-fra.com

Linux - exécuter la même commande sur de nombreuses machines à la fois

J'ai environ une douzaine de boîtes Linux que j'ai occasionnellement besoin d'exécuter la même commande. Existe-t-il un moyen plus simple (ou de manière automatisée) de faire cela à partir de vous connecter à chaque machine et d'exécuter la commande, une à la fois? Ce n'est pas les mêmes commandes tout le temps et ce n'est pas à une heure prédéfinie, donc ce n'est pas quelque chose d'idéal pour des outils tels que cron.

39
Chris Bunch

Hm, peut-être pconsole est l'outil souhaité.

12
Node

Il y a aussi clustersh , qui, bien, fait exactement ce que vous pensez. Yay pour la nommage descriptif!

15
Jörg W Mittag

Ne négligez pas PSSH et DSH soit; Ils sont tous deux un peu comme GSH que @philip Durbin a mentionné.

8
pjz

Vous pouvez essayer Capistrano . À l'origine, c'est un Rails, mais il a grandi de faire de nombreuses choses avec des machines distantes.

Pour une APRACH plus complète à l'administration de plusieurs machines, vous voudrez peut-être essayer Chef .

8
rkj

Ansible a la capacité de faire des commandes ad hoc et est également extensible de la gestion complète de configuration. La capacité de faire correspondre en fonction des groupes est excellente.

http://docs.ansible.com/intro_adhoc.html

8
Robert

Vous devriez vérifier la marionnette ici est un linux.com article sur sa configuration et son utilisation

8
trent

Je suppose que je vais copier et coller ma réponse du débordement de pile , quelles personnes semblaient aimer. . .


La question de savoir comment exécuter des commandes sur de nombreux serveurs aussitôt obtenu une liste de diffusion Perl l'autre jour et je donnerai la même recommandation j'ai donnée là-bas , qui doit utiliser GSH: http://outflux.net/unix/software/gsh ==

gsh est similaire à la "for box in box1_name box2_name box3_name "Solution déjà donnée mais je trouve que GSH sera plus pratique. Vous configurez un fichier A/etc/Ghosts contenant vos serveurs dans des groupes tels que Web, DB, RHEL4, X86_64 ou tout autre (Man Ghosts), vous utilisez ce groupe. quand vous appelez gsh.

[pdurbin@beamish ~]$ gsh web "cat /etc/redhat-release; uname -r"
www-2.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
www-2.foo.com: 2.6.9-78.0.1.ELsmp
www-3.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
www-3.foo.com: 2.6.9-78.0.1.ELsmp
www-4.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
www-4.foo.com: 2.6.18-92.1.13.el5
www-5.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
www-5.foo.com: 2.6.18-92.1.13.el5
[pdurbin@beamish ~]$

Vous pouvez également combiner ou diviser des groupes de fantômes, à l'aide de Web + dB ou Web-Rhel4, par exemple.

Je mentionnerai également que lorsque je n'ai jamais utilisé Shmux, son site Web contient une liste de logiciels (y compris GSH) qui vous permet d'exécuter des commandes sur de nombreux serveurs à la fois. Capistrano a déjà été mentionné et (de savoir ce que je comprends) pourrait également être sur cette liste.

6
Philip Durbin

Si vous êtes sur un ordinateur de bureau KDE, Konsole dispose de l'option "Envoyer une entrée à toutes les sessions". Il s'applique à toutes les sessions ouvertes dans la même fenêtre de Konsole.

5
rgmarcha

Vous pouvez aussi essayer ssh [user@]hostname [command] Et puis boucle à travers les noms d'hôtes.

5
Jason V.

Jetez également un coup d'oeil à Func. FUNC vous permet d'utiliser une architecture de module pour contrôler différents aspects d'un système, de traiter des packages, d'exécuter des commandes, etc. Il fonctionne sur un module client/serveur via SSL et dispose également d'un système d'authentification assez flexible.

4
Stick

Si vous êtes déjà un utilisateur TMUX, vous pourriez déguster TMUX-CSSH (signifie TMUX-C(luster)-SSH). Vous lui donnez une liste de noms de serveurs et il ouvre une nouvelle fenêtre TMUX avec une session SSH ouverte sur chaque serveur dans son propre volet. Tous les frappes sont copiés à chaque fenêtre. En fonction du nombre d'hôtes, la sortie peut être difficile à lire.

4
appleshampoo

J'ai utilisé Clustersh et ça marche. Cependant, au-delà d'un certain nombre de terminaux, cela n'apparaît pas bien.

Je suis surpris que personne n'a mentionné Xargs. Xargs est parfait pour la plupart des choses. En fait, je suis tellement confortable avec cela que je n'utiliserais plus de clubsh.

Exemple

echo -n Host1 Host2 Host3 Host4|xargs -d" " -n1 -P30 -I+ ssh + "Sudo service Apache2 restart"

(Redémarrez Apache sur tous les hôtes Web.)

4
JDS

D'autres outils sont:

Rundeck pourrait également être désigné comme contraritant léger.

Ces outils vous donnent non seulement une coque de cluster, mais également un fichier Web et vous pouvez enregistrer vos travaux pour une utilisation future.

3
Christian

Vous pouvez également essayer Cluster SSH (CSSH). Je ne l'ai pas utilisé, mais il y a un article sur Linuxjournal.com appelé "Gérer plusieurs serveurs efficacement" qui en parle.

2
Brad Beyenhof

Voici quelques exemples utilisant les commandes mentionnées dans d'autres réponses:

PDSH

Peut prendre d'abord des gammes numériques, des sorties avec le nom d'hôte, semble en réalité maintenue :

version la plus simple:

pdsh -w hostname echo done

sortir:

hostname: done

Exemple plus compliqué:

pdsh -w username@hostname[7-8],username@otherhost "sleep 5 && echo done"

sortir:

hostname8: done
hostname7: done
otherhost: done

mac: brew install pdsh

DSH

dsh -m user@Host,user@Host --remoteshell ssh --concurrent-Shell -- "sleep 5 && echo done"

besoin de la sélection de shell distant Sinon, il utilisera "RSH" qui peut ou non être disponible.

mac: brew install dsh

PSSH

pssh -i -H user@Host -H user@Host "sleep 5 && echo done"

Ils peuvent tous prendre la liste des machines d'un fichier, éventuellement également.

N'hésitez pas à ajouter plus d'exemples ici, c'est un wiki communautaire

mac: brew install pssh

cluster ssh

Cluster ssh (la "version" Mac uniquement "apparemment, il existe deux versions que l'autre est ici ) ouvre effectivement" Terminaux réels "avec une grande borne à ce bas qui envoie une entrée à tous les autres. Donc, c'est comme une interface utilisateur qui l'envoie à plusieurs.

Ex:

csshX hostname0[1-2] hostname3 Ensuite, tapez ensuite dans la boîte rouge et que vous allez à chaque fenêtre de terminal, une par hôte, qu'elle apparaît.

mac: brew install csshx (une ancienne version mais travaille toujours)

il y a aussi brew install ansible Fwiw

1
rogerdpack

Utilisez plat, simple et très puissant! Ce script a changé ma vie :) un script pour les gouverner tous!

http://nic-nac-project.org/~drimiks/gnu/dish.shtml

La diligence shell 'plat' exécute des commandes via SSH/RSH/Telnet/MySQL simultanément sur plusieurs systèmes. Modification du mot de passe, la mise à jour de la configuration, la copie de fichiers, l'état de la vérification, etc. sur des centaines de nœuds est faite, puis simple. Le plat est similaire à celui de l'IBM 'DSH' (Shell distribué), mais permet en outre une exécution à distance des commandes nécessitant une authentification. Comparé à d'autres packages open source qui incluent une coque distribuée (ou des outils similaires) tels que Clusterit, coquille de danseuse, coquille distribuée parallèle, ou C3, un plat est un emballage à distance mince et facile à utiliser pour des cas où une solution flexible est nécessaire. Vous pouvez parcourir la page manuelle du plat en ligne ici.

1
Guillaume