如何同时将单个文件发送到多个远程站点?

如何同时将单个文件发送到多个远程站点?

可以scp用来同时发送单个文件到多个远程服务器吗?如果是这样,怎么办?如果没有,还有什么选择?

答案1

pdcp来自PDSH套餐是一种选择。 pdsh是为了帮助管理 HPC 集群而编写的 - 我已经用它来管理 HPC 集群,我还用它来管理多个非集群机器。

pdshpdcp使用性别定义主机和主机组(“组”是您选择分配给主机的任意标签,主机可以具有任意数量的标签。)

例如,如果您有一个名为“webservers”的组,其中/etc/genders包括 hostA、hostB、hostC,pdcp -g webservers myscript.sh /usr/local/bin则将 myscript.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 可能对您的需求来说有点过分了……它确实被设计为系统管理员的工具,而不是普通的非 root 用户的工具。

围绕 scp 编写一个简单的 shell 脚本包装器可能对您来说就足够了。例如,这是此类包装脚本的一个极其简单、简约的版本。

#! /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)。

相关内容