Réponses:
Disons que vous avez un fichier ( destfile.txt
) avec des user@host
valeurs -un, 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
for
boucle en while read dest; do
, elle lira à partir de l'entrée standard. Mettez-le dans un script et alimentez-le destfile.txt
(par exemple, ./thescript.sh <destfile.txt
).
Une autre alternative (et une ligne) serait d'utiliser à la place 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
Bien sûr, cela nécessite une information supplémentaire (l'hôte local) et différents droits d'utilisateur, mais vous évitez de boucler en bash et d'utiliser l'indirection pour lire le fichier.
Voici une autre option, avec un script shell d'une ligne.
cscp.sh 20337.patch < hosts.txt
Il utilise deux fichiers, un pour la boucle et un pour la liste d'hôtes du serveur. Il lit $1
le premier paramètre de la CLI comme nom de fichier pour SCP
cscp.sh
#!/bin/bash
while read host; do
scp $1 ${host}:
done
hosts.txt
project-prod-web1
project-prod-web2
project-prod-web3
Usage
Copiez le fichier sur plusieurs hôtes:
cscp.sh file < hosts