Respuestas:
Digamos que tiene un archivo ( destfile.txt
) con user@host
valores, uno en cada línea. Entonces podrías hacer así:
while IFS= read -r dest; do
scp ourfile.txt "$dest:remote/path/"
done <destfile.txt
for
bucle a while read dest; do
, se leerá desde la entrada estándar. Póngalo en un script y aliméntelo destfile.txt
(p ./thescript.sh <destfile.txt
. Ej .).
Otra alternativa (y una línea) sería utilizar pdsh para conectarse a cada nodo de destino y activar un get desde allí:
pdsh -w^destfile.txt scp hostname:/path/to/file /path/to/destfile
Por supuesto, esto requiere una información más (el host local) y diferentes derechos de usuario, pero evita hacer bucles en bash y usar indirección para leer el archivo.
Aquí hay otra opción, con un script de shell de una línea.
cscp.sh 20337.patch < hosts.txt
Utiliza dos archivos, uno para el bucle y otro para la lista de hosts del servidor. Lee $1
el primer parámetro de la CLI como el nombre del archivo a SCP
cscp.sh
#!/bin/bash
while read host; do
scp $1 ${host}:
done
hosts.txt
project-prod-web1
project-prod-web2
project-prod-web3
Uso
Copie el archivo a varios hosts:
cscp.sh file < hosts
Si tiene una convención de nomenclatura constante para varios servidores, puede hacer algo ordenado como:
for x in st1-abc-{11..20}.acme.com; do scp filez.tgz user@$x; done