scp un solo archivo a múltiples ubicaciones

Respuestas:

24

Digamos que tiene un archivo ( destfile.txt) con user@hostvalores, 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
Kusalananda
fuente
¡Esto funciona! Sin embargo, todavía es un puñado de escribir. Quizás haya una manera de simplificar eso.
Andrew
2
@ Andrew, si cambias el forbucle 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 .).
Kusalananda
Estoy haciendo lo primero, pero con rsync y algunos de mis nodos no se actualizan. ¿Alguna idea de por qué?
Soubriquet
7

Parece un trabajo para parallel-scp (n) (t) : implementa un conjunto de comandos que permiten que los comandos scp se ejecuten en varios sistemas a la vez. Permitirá la copia de archivos en paralelo a un conjunto de máquinas.

AnonymousLurker
fuente
0

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.

Rick Moritz
fuente
0

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 $1el 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
David Thomas
fuente
0

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
escritura02392
fuente