我有大约十几个Linux机器,偶尔需要运行相同的命令。 有没有一种更简单的方法(或自动化的方式)来做到这一点,除了login到每台机器,并一次运行一个命令? 这不是一直的命令,也不是预设的时间,所以对于像cron
这样的工具来说,这不是一个理想的select。
嗯,也许pconsole是你想要的工具。
还有ClusterSSH ,这也正是你所想的。 耶为描述性命名!
你应该检查出木偶这里是一个linux.com 文章的设置和使用
不要忽视pssh和dsh ; 他们都非常像@Dhilip Durbin提到的gsh。
你可以试试Capistrano 。 最初它是一个Rails部署工具,但它开始用远程机器做很多事情。
对于一个更完整的方法来pipe理多台机器,你可能想尝试厨师 。
Ansible有能力做临时命令,也可以扩展到完整的configurationpipe理。 基于团队的匹配能力非常好。
我想我会复制并粘贴Stack Overflow的答案 ,这似乎是人们喜欢的。 。 。
如何在多台服务器上同时运行命令的问题在前一天出现在Perl邮件列表中,我将给出与之相同的build议,即使用gsh: http : //outflux.net/unix/软件/ GSH
for box in box1_name box2_name box3_name
“ for 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。
这些工具不仅为您提供了一个集群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 -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 -m user@host,user@host --remoteshell ssh --concurrent-shell -- "sleep 5 && echo done"
需要远程shell设置,否则将使用“rsh”,甚至可能不可用。
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中似乎不可用)