遍历服务器列表的更好方法

Son*_*ton 7 ssh shell bash mcollective

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

for s in `cat servers.txt` ; do
    echo; echo $s
    ssh $s 'do something'
done
Run Code Online (Sandbox Code Playgroud)

我想知道(从 shell 的角度)是否有比 cat servers.txt

是的,我知道 mcollective、capistrano 等工具 - 我经常这样做是为了解决 mcollective 问题:-)

Nit*_*itz 6

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

在此处输入图片说明

它也可以作为 Debian 软件包使用。


eww*_*ite 5

我的快速和肮脏......其中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
Run Code Online (Sandbox Code Playgroud)

  • @MichaelMartinez 我不知道,伙计。OP 在这一点上不需要做任何事情......我给出了 **I** 用于此任务的示例。而且通常任务不是我希望并行完成的。如果您认为此处的原始帖子具有误导性或答案不足,完全欢迎您发布您自己的问题和答案。 (5认同)

ptm*_*man 5

请帮自己一个忙,使用为此设计的东西。您已经了解 mcollective,但您和我都知道它需要一些基础设施才能工作。木偶和厨师也是如此。

clustershparallel sshdancer shell是对 shell for 循环的简单改进。他们不需要更多的基础设施。

但还有ansible,它可以让您做到这一点,而且还可以通过几个步骤编写可重用的“剧本”。除了 sshd 之外,它确实需要安装 python,但实际上我从来不需要单独安装它,它总是可用的。

Ansible 是我尝试过的唯一一个也可以很好地用作部署和编排工具的配置管理系统(puppet 需要 mcollective,也许还需要 capistrano/fabric,...)

(是的,Puppet和Chef以及所有其他的都可以在没有中央服务器的情况下运行,但是您需要在主机上安装软件包来管理,而ansible不需要)


daw*_*wud 5

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

您可以使用主机列表、命令列表、将这两个内容存储在文件中以及更多选项(例如ssh-agent集成、代理支持等)来调用它。请查看联机帮助页了解所有详细信息。

一个例子可能很简单:

$ mussh -H host_list.txt -C command_list.txt
Run Code Online (Sandbox Code Playgroud)