web-dev-qa-db-fra.com

scp un seul fichier à plusieurs endroits

Pouvez-vous scp un fichier à plusieurs emplacements dans la même commande?

Par exemple:

scp file.txt [email protected]:, [email protected]:

Ou serait-il plus pratique de créer un script bash qui contient déjà tous les hôtes et qui prendrait simplement un fichier comme argument?

27
Andrew

Supposons que vous avez un fichier (destfile.txt) avec user@Host- valeurs, un sur chaque ligne. Ensuite, vous pourriez faire comme ceci:

while IFS= read -r dest; do
  scp ourfile.txt "$dest:remote/path/"
done <destfile.txt
23
Kusalananda

Ressemble à un travail pour parallel-scp (n)(t) - ceci implémente un ensemble de commandes permettant l'exécution de commandes scp sur plusieurs systèmes à la fois. Cela permettra de copier des fichiers en parallèle sur un ensemble de machines.

6
AnonymousLurker
cat file.txt | tee >(ssh [email protected] "cat > file.txt") \
                   >(ssh [email protected] "cat > file.txt")

tar cz file1 file2 file3 | tee >(ssh [email protected] "tar xz") \
                               >( ... )
4
grawity

Voici une autre option, avec un script Shell à une ligne.

cscp.sh 20337.patch < hosts.txt

Il utilise deux fichiers, un pour la boucle et un pour la liste des hôtes du serveur. Il lit $1 pour le premier paramètre de la CLI en tant que nom de fichier vers SCP

cscp.sh

#!/bin/bash
while read Host; do
  scp $1 ${Host}:
done

hosts.txt

project-prod-web1
project-prod-web2
project-prod-web3

Utilisation

Copier le fichier sur plusieurs hôtes:

cscp.sh file < hosts
0
David Thomas

Si vous avez une convention de dénomination cohérente pour plusieurs serveurs, vous pouvez faire quelque chose de bien, comme:

for x in st1-abc-{11..20}.acme.com; do scp filez.tgz user@$x; done
0
deed02392

Une autre alternative (et une ligne) consisterait à utiliser pdsh pour se connecter à chaque nœud cible et déclencher un get à partir de là:

pdsh -w^destfile.txt scp hostname:/path/to/file /path/to/destfile

Ceci nécessite bien sûr une information supplémentaire (l'hôte local) et des droits d'utilisateur différents, mais vous évitez les boucles en bash et l'utilisation de l'indirection pour lire le fichier.

0
Rick Moritz