4 votes

Comment copier des fichiers sur plusieurs hôtes à travers le réseau ?

J'ai plus de 200 systèmes Ubuntu sur lesquels je veux copier un fichier.

Comment puis-je copier des fichiers sur plusieurs hôtes à travers le réseau ? Quelles sont les possibilités qui s'offrent à moi ?

Note : Cette question est liée à Comment trouver la version d'une machine Ubuntu à distance ?

4voto

Mufaka Points 54

Je me rends compte que vous ne voulez probablement que quelque chose de simple, mais il existe des dizaines de façons de procéder. Mais d'abord, nous voulons être en mesure de contrôler tous les ordinateurs en même temps.

Cela peut sembler étrange, mais cela vous fera gagner du temps par la suite lorsque vous voudrez envoyer un arrêt, un redémarrage ou une mise à niveau à tous les ordinateurs.

clusterssh

Installons clusterssh et lancer une commande pour se connecter à tous nos serveurs en même temps (ce n'est peut-être pas viable pour 200 en même temps - je n'ai pas 200 ordinateurs pour le tester !)

sudo apt-get install clusterssh
cssh user@first_computer:port user@second_computer:port ...

Cela donnera naissance à de petites fenêtres de sortie pour chaque connexion (pourquoi je dis 200, c'est peut-être exagéré) et à un dialogue d'entrée global. De là, vous pouvez envoyer la même commande à tous vos serveurs.

Si vous voulez le faire à partir de la ligne de commande, et que cela peut prendre en charge 200 connexions, vous pouvez consulter la commande -a pour cssh . Vous pouvez lancer à chaque serveur une commande (ou une chaîne de commandes). Il se connectera, exécutera et fermera la connexion.

cssh -a 'cd directory; ls'  user@first_computer:port user@second_computer:port 

Vous pouvez simplifier vos connexions en utilisant clusterssh La puissante configuration de l'entreprise. Ouvrir man cssh et se rendre à la FILES section. Elle explique comment vous pouvez créer un /etc/clusters pour vous permettre de créer rapidement des groupes (appelés balises) comme ceci :

clusters = <tag1> <tag2> <tag3>
<tag1> = host1 host2 host3
<tag2> = user@host4 user@host5 host6
<tag3> = <tag1> <tag2>

Alors vous pouvez le faire :

cssh -T 'tag2' -a 'cd directory; ls'

Utiliser un référentiel central

Je ne parle pas d'un dépôt de deb (mais c'est possible aussi, je suppose) mais plutôt de quelque chose comme git o brz . Il peut s'agir de quelque chose d'aussi simple qu'un serveur web ou un partage réseau. Si la bande passante du réseau présente des goulots d'étranglement à certains endroits, quelque chose comme un serveur de torrents pourrait même être la meilleure solution (c'est ainsi que Facebook met à jour tous ses nœuds).

Dites à votre réseau de télécharger les fichiers

A partir de là, il faut juste relier les points. En utilisant cssh vous diriez à tous vos ordinateurs d'aller chercher le fichier et de faire ce qu'il faut avec.

Je vous suggère de commencer petit. Obtenez le fichier partagé, puis essayez un simple cluster de quelques ordinateurs et voyez comment cela se passe. Etendez-le ensuite.

Je suggère que même une fois que vous avez terminé, vous gardiez une grappe de quelques ordinateurs pour faire des tests avant de pousser les choses vers le groupe principal.

3voto

Mufaka Points 54

Sinon, vous pouvez continuer à le faire en poussant. La façon la plus simple de le faire est d'écrire un script qui :

  1. parcourt une liste de serveurs
  2. Se connecte au serveur et copie les fichiers (deux options ici) :

    1. Utilisations sshfs pour monter localement le système de fichiers distant, cp / rsync les fichiers, fusermount -u le répertoire sur lequel vous l'avez monté (pour démonter le système distant). Continuez.
    2. Il suffit d'utiliser rsync Les capacités du réseau de l'entreprise pour copier les fichiers.

      rsync /localdir/ user@remote:/remotedir

1voto

Mercer Traieste Points 101

[La réponse d'Oli est apparue pendant que je tapais].

Une alternative à clusterss est parallel-scp. Elle fait partie du programme paquet pssh

Vous devez fournir la liste des hôtes dans un fichier texte (par exemple hosts.txt) et ensuite vous émettez :

parallel-scp -h hosts.txt file2copy.dat /target/directory

Consultez la page de manuel pour répondre à vos besoins particuliers. Il ne devrait pas y avoir de limites pour un trop grand nombre de connexions, puisqu'il n'est pas nécessaire d'ouvrir des connexions actives à toutes les connexions, comme le fait cssh, mais plutôt de manière séquentielle.

PS : La mise en place d'une autorisation basée sur la clé rendra bien sûr les choses beaucoup plus faciles, mais je soupçonne que la distribution de votre clé à 200 systèmes est la raison pour laquelle vous posez cette question...

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X