我经常做的事情,我循环通过服务器列表采取一些行动。 例如:
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'"