단일 파일을 여러 원격 사이트에 동시에 보내는 방법은 무엇입니까?

단일 파일을 여러 원격 사이트에 동시에 보내는 방법은 무엇입니까?

scp단일 파일을 여러 원격 서버에 동시에 보내는 데 사용할 수 있습니까 ? 그렇다면 어떻게 해야 할까요? 그렇지 않은 경우 옵션은 무엇입니까?

답변1

pdcp~에서PDSH패키지는 옵션입니다. pdsh이는 HPC 클러스터 관리를 돕기 위해 작성되었습니다. HPC 클러스터를 관리하는 데 사용했고 클러스터되지 않은 여러 컴퓨터를 관리하는 데도 사용했습니다.

pdsh그리고 pdcp사용성별호스트 및 호스트 그룹 정의("그룹"은 호스트에 할당하기 위해 선택한 레이블이며 호스트에는 원하는 수의 레이블이 있을 수 있습니다.)

/etc/genders예를 들어, 호스트A, 호스트B, 호스트C를 포함하는 "webservers"라는 그룹이 있는 경우 pdcp -g webservers myscript.sh /usr/local/binmyscript.sh를 세 호스트 모두의 /usr/local/bin/에 복사합니다.

마찬가지로 pdsh -g all uname -r/etc/genders에서 "all"로 표시된 모든 호스트에서 실행되며 uname -r각 호스트의 출력에는 호스트 이름이 접두어로 붙습니다.

$ pdsh -g all uname -r
indra: 3.2.0-3-amd64
kali: 3.2.0-3-amd64
ganesh: 3.2.0-3-amd64
hanuman: 3.2.0-2-686-pae

pdsh 명령과 pdcp 복사본은 병렬로 실행됩니다(원래 시스템의 과부하를 방지하기 위해 제한 및 시간 초과가 있음).

여러 줄의 출력을 생성하는 명령을 실행하면 따옴표를 읽기 어려울 수 있습니다. pdsh패키지의 또 다른 프로그램은 dshbak더 쉽게 읽을 수 있도록 호스트 이름별로 출력을 그룹화할 수 있습니다.


귀하의 의견을 모두 본 후에는 pdsh 및 pdcp가 귀하의 요구에 비해 약간 과잉일 수 있습니다. 실제로 루트가 아닌 일반 사용자를 위한 도구가 아닌 시스템 관리자를 위한 도구로 설계되었습니다.

scp 주위에 간단한 쉘 스크립트 래퍼를 작성하는 것만으로도 충분할 수 있습니다. 예를 들어, 다음은 이러한 래퍼 스크립트의 매우 간단하고 최소한의 버전입니다.

#! /bin/bash 

# a better version would use a command line arg (e.g. -h) to get a
# comma-separated list of hostnames, but hard-coding it here illustrates
# the concept well enough.
HOSTS="[email protected] [email protected]"

# last argument is the target directory on the remote hosts
target_dir="$BASH_ARGV"

# all but the last arg are the files to copy
files=${@:1:$((${#@} - 1))}

for h in $HOSTS; do
    scp $files "$h:$target_dir"
done

답변2

동시에 여러 대상으로 파일을 보내는 대신 파일을 동시에 여러 번 읽을 수 있습니다.

파일을 NFS로 전송하고, 대상에 파일 시스템을 마운트하고, NFS에서 로컬 대상으로 복사합니다.

이 작업을 수동으로 동시에 수행하려면 대상에서 Cluster-Ssh(cssh)를 사용할 수 있습니다.

관련 정보