当前位置:  开发笔记 > 编程语言 > 正文

如何通过SSH远程将命令自动运行到多个服务器并行?

如何解决《如何通过SSH远程将命令自动运行到多个服务器并行?》经验,为你挑选了4个好方法。

我已经搜索过类似的问题,但除了运行一个命令或者一些命令,例如:

ssh user@host -t sudo su -

但是,如果我基本上需要同时运行一个脚本(比方说)15个服务器.这在bash中是可行的吗?在完美的世界中,我需要尽可能避免安装应用程序.为了论证,让我们说我需要在10个主机上执行以下操作:

    部署新的Tomcat容器

    在容器中部署应用程序并进行配置

    配置Apache vhost

    重新加载Apache

我有一个完成所有这些操作的脚本,但它依赖于我登录所有服务器,从repo中删除脚本,然后运行它.如果这在bash中不可行,你建议用什么替代方案?我是否需要更大的锤子,例如Perl(Python可能是首选,因为我可以保证在RHEL环境中的所有盒子上都有Python,这要归功于yum/up2date)?如果有人能够向我指出任何有用的信息,我将不胜感激,特别是如果它在bash中可行的话.我会满足于Perl或Python,但我只是不知道那些(继续).谢谢!



1> Bash..:

您可以运行che和Yang所示的本地脚本,和/或您可以使用Here文档:

ssh root@server /bin/sh <<\EOF  
wget http://server/warfile    # Could use NFS here  
cp app.war /location  
command 1  
command 2  
/etc/init.d/httpd restart  
EOF 



2> brian d foy..:

通常,我只会使用Expect的原始Tcl版本.您只需要在本地计算机上拥有它.如果我在使用Perl的程序中,我使用Net :: SSH :: Expect执行此操作.其他语言有类似的"期望"工具.


走这条路.感谢您的提示(和编辑).其他人有很好的想法,但我希望运行一个300行的脚本.Perl为bash不会提供的东西带来一些"优雅".(Perl ..优雅..从未想过我会这么说):)

3> Philip Durbi..:

前几天在Perl邮件列表中出现了如何在多个服务器上运行命令的问题,我将给出我在那里给出的相同建议,即使用gsh:

http://outflux.net/unix/software/gsh

gsh类似于已经给出的" for box in box1_name box2_name box3_name"解决方案,但我发现gsh更方便.你设置一个包含你的服务器的/ etc/ghosts文件,例如web,db,RHEL4,x86_64等等(man ghosts),然后在你调用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组合或拆分ghost组.

我还要提到,虽然我从未使用过shmux,但它的网站包含一个软件列表(包括gsh),可以让你一次在许多服务器上运行命令. Capistrano已经被提及,并且(根据我的理解)也可以列在该列表中.



4> antik..:

看看Expect(man expect)

我使用Expect在过去完成了类似的任务.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有