更好的方式来循环通过服务器列表

我经常做的事情,我循环通过服务器列表采取一些行动。 例如:

for s in `cat servers.txt` ; do echo; echo $s ssh $s 'do something' done 

我想知道(从shell的angular度来看)是否有比cat servers.txt更简单的方法

是的,我知道像mcollective,capistrano等工具 – 我经常这样做,以解决mcollective问题:-)

我的快速和肮脏…其中servers.txt有一系列的主机或IP,每一行。

 #!/bin/bash SERVER_LIST=/path/to/servers.txt while read REMOTE_SERVER do ssh $REMOTE_SERVER "do_something_cool" done < $SERVER_LIST 

我使用ClusterSSH 。
它打开了很多小贝壳,你可以在同一时间input所有的贝壳。 当你想在很多服务器上执行相同的命令时,真的很方便,但仍然可以看到输出。
我使用它像这样: clusterssh $(~/get-servers.sh) ,但显然你可以做一些像clusterssh $(cat servers.txt)
结果如下所示:

在这里输入图像说明

它也可以作为一个Debian软件包。

请帮个忙,使用一些为此devise的东西。 你已经知道mcollective了,但你和我都知道它需要一些基础设施来工作。 就像木偶和厨师一样。

clusterssh , 并行ssh和舞者shell是一个shell for循环的简单改进。 他们不需要更多的基础设施。

但也有一个可行的 ,就是让你这么做,还可以用几个步骤写出可重复使用的“剧本”。 它确实需要安装除了sshd之外的python,但实际上我从来没有单独安装,它始终可用。

Ansible是我尝试过的唯一的configurationpipe理系统,同样适用于部署和编排工具(傀儡需要mcollective,也许capistrano / fabric为此,…)

(是的,傀儡和厨师,其余的都可以在没有中央服务器的情况下运行,但是你需要在主机上安装软件包进行pipe理,这是不需要的)

你有没有考虑使用parallel-ssh? https://code.google.com/p/parallel-ssh/

如果/当我们的mco或木偶设置被打破,我通常会回头使用。 这是另一个依赖pipe理,但是如果你有大量的boxenpipe理的话,这是完全值得的 – 还可以select多less台机器一起或并行工作,甚至一次只做一台机器你已经习惯了bash。

要在各种服务器上执行一个简单的任务,而无需使用任何为此目的而devise的工具,无论它们是否需要以前的基础架构,都可以使用一个名为mussh的简单shell脚本,在许多发行版中作为一个包分发。

您可以使用主机列表,命令列表,命令列表,存储文件和其他选项,比如ssh-agent集成,代理支持…查看手册页的所有细节。

一个例子可能如此简单:

 $ mussh -H host_list.txt -C command_list.txt 

以下是如何使用xargs来并行化这些ssh会话:

 cat servers.txt | xargs -IH -n1 -P0 ssh H 'some command to run' 

您还可以将-n或-f选项添加到ssh以从/ dev / nullredirectstdin,或将会话放在后台。 如果你必须为每个主机键入一个密码,那么这对你没有多大帮助,但是如果你使用的是ssh密钥,那么这个密码很好用。

解除我的答案。 虽然你不清楚你要求什么。


有一个名为并行SSH的项目,它提供了ssh,scp和rsync的并行版本。

所以好处是你不需要做任何shell脚本,只需要提供一个运行命令的服务器列表就可以了。

如果你有一套长时间运行的ssh命令,那么这是非常好的,因为它可以并行执行所有的命令,从而可以大大提高速度。

例如

 parallel-ssh -h myhosts.txt "echo 'hello world'"