it-swarm.com.de

scp eine einzelne Datei an mehrere Speicherorte

Können Sie eine Datei scp an mehreren Speicherorten im selben Befehl speichern?

Zum Beispiel:

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

Oder wäre es praktischer, ein Bash-Skript zu erstellen, das alle Hosts enthält und nur eine Datei als Argument verwendet?

27
Andrew

Angenommen, Sie haben eine Datei (destfile.txt) mit [email protected]- Werten, eine in jeder Zeile. Dann könnte man das so machen:

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

Sieht aus wie ein Job für parallel-scp (n)(t) - Dies implementiert eine Reihe von Befehlen, mit denen scp-Befehle auf mehreren Systemen gleichzeitig ausgeführt werden können. Es ermöglicht das Kopieren von Dateien parallel zu einer Reihe von Maschinen.

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

Hier ist eine weitere Option mit einem einzeiligen Shell-Skript.

cscp.sh 20337.patch < hosts.txt

Es werden zwei Dateien verwendet, eine für die Schleife und eine für die Server-Host-Liste. Es liest $1 für den ersten Parameter von der CLI als Dateinamen zu SCP

cscp.sh

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

hosts.txt

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

Verwendung

Datei auf mehrere Hosts kopieren:

cscp.sh file < hosts
0
David Thomas

Wenn Sie eine einheitliche Namenskonvention für mehrere Server verwenden, können Sie Folgendes tun:

for x in st1-abc-{11..20}.acme.com; do scp filez.tgz [email protected]$x; done
0
deed02392

Eine andere Alternative (und ein Einzeiler) wäre, stattdessen pdsh zu verwenden, um eine Verbindung zu jedem Zielknoten herzustellen und von dort ein Get auszulösen:

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

Dies erfordert natürlich eine weitere Information (den lokalen Host) und unterschiedliche Benutzerrechte, aber Sie vermeiden, Bash einzulesen und die Datei durch Indirektion zu lesen.

0
Rick Moritz