我经常会循环遍历服务器列表以采取一些操作。例如:
for s in `cat servers.txt` ; do
echo; echo $s
ssh $s 'do something'
done
我想知道(从 shell 的角度来看)是否有比cat servers.txt
是的,我知道像 mcollective、capistrano 等工具 - 我经常这样做来解决 mcollective 问题 :-)
答案1
我的快速而肮脏...其中 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
答案2
我用集群SSH。
它会打开很多小 shell,你可以同时输入所有 shell 的内容。当你想在很多服务器上执行相同的命令但仍能看到输出时,这真的很方便。
我这样使用它:clusterssh $(~/get-servers.sh)
,但显然你可以这样做,clusterssh $(cat servers.txt)
结果如下所示:
它也可以作为 Debian 软件包使用。
答案3
请帮自己一个忙,使用为此设计的东西。您已经了解 mcollective,但您和我都知道它需要一些基础设施才能工作。puppet 和 chef 也是如此。
clusterssh,并行 ssh和舞者壳是对 shell for 循环的简单改进。它们不需要更多基础设施。
但也有ansible,它不仅能让你做到这一点,还能编写包含多个步骤的可重复使用的“剧本”。除了 sshd 之外,它还需要安装 python,但实际上我从未单独安装过它,它一直可用。
Ansible 是我尝试过的唯一一款配置管理系统,它也可以很好地用作部署和编排工具(puppet 需要 mcollective,也许还需要 capistrano/fabric,...)
(是的,Puppet 和 Chef 以及所有其他程序都可以在没有中央服务器的情况下运行,但是您需要在主机上安装软件包来管理,而 ansible 不需要这样做)