Linux – 一次在许多机器上运行相同的命令

我有大约十几个Linux机器,偶尔需要运行相同的命令。 有没有一种更简单的方法(或自动化的方式)来做到这一点,除了login到每台机器,并一次运行一个命令? 这不是一直的命令,也不是预设的时间,所以对于像cron这样的工具来说,这不是一个理想的select。

    嗯,也许pconsole是你想要的工具。

    还有ClusterSSH ,这也正是你所想的。 耶为描述性命名!

    你应该检查出木偶这里是一个linux.com 文章的设置和使用

    不要忽视pssh和dsh ; 他们都非常像@Dhilip Durbin提到的gsh。

    你可以试试Capistrano 。 最初它是一个Rails部署工具,但它开始用远程机器做很多事情。

    对于一个更完整的方法来pipe理多台机器,你可能想尝试厨师 。

    Ansible有能力做临时命令,也可以扩展到完整的configurationpipe理。 基于团队的匹配能力非常好。

    http://docs.ansible.com/intro_adhoc.html

    我想我会复制并粘贴Stack Overflow的答案 ,这似乎是人们喜欢的。 。 。


    如何在多台服务器上同时运行命令的问题在前一天出现在Perl邮件列表中,我将给出与之相同的build议,即使用gsh: http : //outflux.net/unix/软件/ GSH

    for box in box1_name box2_name box3_namefor box in box1_name box2_name box3_name ”解决scheme,但是我发现for box in box1_name box2_name box3_name更方便。 你设置一个/ etc / ghosts文件,其中包含你的服务器,如web,db,RHEL4,x86_64或其他(鬼魂)组,然后在你调用gsh时使用这个组。

     [pdurbin@beamish ~]$ gsh web "cat /etc/redhat-release; uname -r" www-2.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7) www-2.foo.com: 2.6.9-78.0.1.ELsmp www-3.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7) www-3.foo.com: 2.6.9-78.0.1.ELsmp www-4.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga) www-4.foo.com: 2.6.18-92.1.13.el5 www-5.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga) www-5.foo.com: 2.6.18-92.1.13.el5 [pdurbin@beamish ~]$ 

    例如,您也可以使用web + db或web-RHEL4组合或分割幻影组。

    我还会提到,虽然我从来没有使用过shmux,但是它的网站包含一个软件列表(包括gsh),可以让你一次在很多服务器上运行命令。 卡皮斯特拉诺已经被提及,并且(据我所知)也可以在这个名单上。

    如果您在KDE桌面上, konsole具有“发送input到所有会话”选项。 它适用于在同一个konsole窗口中打开的所有会话。

    您也可以尝试ssh [user@]hostname [command] ,然后遍历主机名称。

    也看看function。 Func允许您使用模块体系结构来控制系统的不同方面,从处理包到运行命令等等。它通过SSL在客户机/服务器模块上工作,并且具有相当灵活的身份validationscheme。

    我已经使用ClusterSSH,它的工作原理。 但是,超过一定数量的terminal,其规模并不好。

    我很惊讶没有人提到xargs。 Xargs对于大多数事情来说是完美的。 事实上,我已经很舒服了,所以我再也不用clustersh了。

     echo -n host1 host2 host3 host4|xargs -d" " -n1 -P30 -I+ ssh + "sudo service apache2 restart" 

    (在所有networking主机上重新启动apache。)

    如果你已经是一个tmux用户,你可能会喜欢tmux-cssh (代表TMUX-C(luster)-SSH )。 您给它一个服务器名称列表,它会打开一个新的tmux窗口,并在其自己的窗格中向每个服务器开放一个SSH会话。 所有击键都被复制到每个窗口。 根据主机的数量,输出可能难以读取。

    其他工具是:

    • Rundeck
    • ControlTier

    RunDeck也可以被描述为轻量级ControlTier。

    这些工具不仅为您提供了一个集群shell,而且还提供了一个web前端,您可以保存您的作业以备将来使用。

    您也可以尝试群集SSH(cssh)。 我没有使用它,但有一篇关于LinuxJournal.com的文章,名为“高效地pipe理多个服务器”,谈论它。

    使用 ,简单而强大! 这个脚本改变了我的生活:)一个脚本来统治他们!

    http://nic-nac-project.org/~drimiks/gnu/dish.shtml

    勤奋的shell“盘”通过ssh / rsh / telnet / mysql同时在多个系统上执行命令。 在数百个节点上更改密码,更新configuration,复制文件,检查状态等操作变得非常简单。 Dish类似于IBM的'dsh'(分布式shell),但是还允许远程执行需要authentication的命令。 与其他包含分布式shell(或类似工具)(如ClusterIt,舞者的shell,并行分布式shell或C3)的其他开放源代码软件包相比,在需要灵活解决scheme的情况下,碟子是一种小巧且易于使用的远程shell封装。 你可以在这里在线浏览菜的手册页。

    以下是使用其他答案中提到的命令的一些示例:

    PDSH

    可以采用数字范围,首先输出主机名,似乎实际上保持

    最简单的版本:

    pdsh -w hostname echo done

    输出:

     hostname: done 

    更复杂的例子:

    pdsh -w username@hostname[7-8],username@otherhost "sleep 5 && echo done"

    输出:

     hostname8: done hostname7: done otherhost: done 

    DSH

    dsh -m user@host,user@host --remoteshell ssh --concurrent-shell -- "sleep 5 && echo done"

    需要远程shell设置,否则将使用“rsh”,甚至可能不可用。

    PSSH

    pssh -i -H user@host -H user@host "sleep 5 && echo done"

    他们都可以从文件中获取机器列表,也可以select。

    随意在这里添加更多的例子,这是一个comunity维基

    自制装置

    这些软件包可用于自制软件:

    $ brew install pssh dsh pdsh #( $ brew install pssh dsh pdsh和pconsole在自制FWIW中似乎不可用)