Comment puis-je envoyer un seul file à plusieurs sites distants en même time?

Peut-on utiliser scp pour envoyer un seul file à plusieurs servers distants en même time? Si c'est le cas, comment? Sinon, quelle est l'alternative?

pdcp du package pdsh est une option. pdsh été écrit pour aider à la gestion des clusters HPC – je l'ai utilisé pour cela, et je l'ai également utilisé pour la gestion de plusieurs machines non clusterisées.

pdsh et pdcp utilisent des genres pour définir des hôtes et des groupes d'hôtes (un "groupe" est n'importe quel tag arbitraire que vous choisissez d'assigner à un hôte, et les hôtes peuvent avoir autant de tags que vous voulez).

Par exemple, si vous aviez un groupe appelé «webservers» dans /etc/genders genenders qui incluait hostA, hostB, hostC, alors pdcp -g webservers myscript.sh /usr/local/bin copyrait myscript.sh dans / usr / local / bin / sur les trois hôtes.

De même, pdsh -g all uname -r exécuterait uname -r sur chaque hôte étiqueté avec "all" dans / etc / genenders, avec la sortie de chaque hôte préfixé avec le nom de l'hôte.

 $ pdsh -g all uname -r indra: 3.2.0-3-amd64 kali: 3.2.0-3-amd64 ganesh: 3.2.0-3-amd64 hanuman: 3.2.0-2-686-pae 

Les commands pdsh et les copys pdcp sont exécutées en parallèle (avec des limites et des timeouts d'attente pour éviter la surcharge du système d'origine).

Lorsque la command en cours produit une sortie multiligne, elle peut être interprétée comme étant confuse. Un autre programme du package pdsh appelé dshbak peut regrouper la sortie par nom d'hôte pour faciliter la lecture.


après avoir vu tous vos commentaires, il est possible que pdsh & pdcp soit exagéré pour vos besoins … il est vraiment conçu pour être l'outil d'un administrateur système plutôt que l'outil normal d'un user non root.

Il se peut qu'écrire un wrapper de script shell autour de scp soit suffisant pour vous. Par exemple, voici une version extrêmement simple et minimalist d'un tel script wrapper.

 #! /bin/bash # a better version would use a command line arg (eg -h) to get a # comma-separated list of hostnames, but hard-coding it here illustrates # the concept well enough. HOSTS="[email protected] [email protected]" # last argument is the target directory on the remote hosts target_dir="$BASH_ARGV" # all but the last arg are the files to copy files=${@:1:$((${#@} - 1))} for h in $HOSTS; do scp $files "$h:$target_dir" done 

Au lieu d'envoyer un file à plusieurs cibles en même time, vous pouvez le lire plusieurs fois en même time.

Transférez votre file vers NFS, montez ce système de files sur vos cibles et copyz-le depuis NFS vers votre destination locale.

Pour le faire manuellement et simultanément, vous pouvez utiliser cluster-ssh (cssh) sur les cibles.