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?
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
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") \
>( ... )
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
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
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.