我有一个包含 10 个服务器的 IP 地址的文件。例如host.txt
我想在 1 台服务器上的 10 台不同服务器上压缩一个目录。
如何与这些服务器并行运行 ssh 以减少执行时间
我尝试过下面的代码,但没有运气。
cat host.txt |
while read i
do
ssh -qn $i 'tar -cvf /tmp/TC.tar.gz /etc' &
done
期待:
想要在 10 服务器上并行 SSH,以便 tar 命令将在服务器上并行执行,而不使用 PSSH。
答案1
使用 clustersh:https://sourceforge.net/projects/clusterssh/
要并行执行命令,您可以像这样使用它
cssh user@client1 user@client2
这样,您将获得每个客户端的终端窗口和在任何终端上并行键入命令的命令窗口。
~/.clusterssh 目录中有很多选项可以设置,因此可以轻松地按标签对客户端进行分组。
要从您的 捆绑客户端host.txt
,该文件~/.clusterssh/tags
可能如下所示:
root@host1 tar update
root@host2 tar update
root@host3 tar test
root@host4 update test
root@host5 update test
通过这种方式,您可以定义标签 tar、update 和 test。您可以使用该标签tar
通过运行 来在前三个主机上运行 clustersh cssh tar
。
在互联网上搜索clusterssh
,您会发现很多有用的文档。
大多数 Linux 发行版都包含 clustersh,因此您可以通过例如 轻松安装它apt-get install clusterssh
。
编辑:
您可以使用以下选项将命令添加到要执行的 clustersh 中-a
:
cssh tar -a "tar -cvf /tmp/TC.tar.gz /etc"
而且如果您使用 ssh 公钥/私钥,则不必一直输入密码......