注:根据作者写的做了下测试,挺实用的,对于批量机器作处理,很方便,且安装过程也简单,如果在装的过程中有报错,需仔细查看报错日志,大多是缺少一些perl模块,利用CPAN安装即可,在这里我转载作下记录,方便以后查看:    

相信很多做运维或者在 Linux/Unix 下做开发的朋友也一样,经常需要 SSH 到某台机器上去做点什么。当你只有一台服务器的时候,并不会觉得敲一串命令有啥不爽,但是当你有多台服务器,每台都需要你 SSH 上去做点什么的时候,如果还纯人工纯手动,那就太郁闷了。agentzh++ 写了 SSH::Batch 来拯救我们。这个我目前在用,管理多台服务器很方便。和大家分享一下。
        SSH::Batch 是基于 Net::OpenSSH 的,而 Net::OpenSSH 是基于 OpenSSH的二进制客户端的,所以只要你机器上装了 OpenSSH 客户端,此外没有其他太多的依赖模块,但正因为此,该模块在 Windows 上是无法使用的。事实上,在 perl 的世界里如果需要编程操纵 SSH, Net::OpenSSH 是首选的模块,而Net::SSH::* 系列的模块,我个人不是很推荐,一来依赖太多,二来有些模块缺人管理,也许以后情况会好些。

1.安装
# cpan SSH::Batch
安装完成后,为我们提供了几个方便的perl程序:atnodes,key2nodes,tonodes,fornodes

2.使用:
(1)根据每个平台或者作用建立相应的集群,而且这个列表维护起来也比较方便。
#vim ~/.fornodesrc
cluster1=[a,b,c].example.com
cluster2=serv[1-10].example.com
cluster3=10.0.0.[3,4,6] 10.0.0.[7-20]
cluster=cluster1+cluster2+cluster3
这里注意:由于SSH::Batch将我们划分的集群当作是集合来看待,所以可以对这些集合进行数学上的运算,如求和,并,交,差集。具体参考官网http://search.cpan.org/~agent/SSH-Batch-0.028/lib/SSH/Batch.pm

(2)查看列表:fornodes -x '{cluster1}'

(3)使用atnodes在目标集合上同步批量执行命令或者脚本
   atnodes -h 查看其用法
   USAGE:

    atnodes [OPTIONS] COMMAND... -- HOST_PATTERN... [OPTIONS]
    atnodes [OPTIONS] COMMAND HOST_PATTERN... [OPTIONS]

OPTIONS:
    -c <num>      Set SSH concurrency limit. (default: 20, when -tty is on, this setting will no use)
                        默认20个并发进程,可以根据需求调整
    -h            Print this help.
    -l            List the hosts and do nothing else.
    -L            Use the line-mode output format, i.e., prefixing
                  every output line with the machine name.
                  (could be controlled by the env SSH_BATCH_LINE_MODE)
    -p <port>     Port for the remote SSH service.
    -ssh <path>   Specify an alternate ssh program.
                  (This overrides the SSH_BATCH_SSH_CMD environment.)
    -t <timeout>  Specify timeout for net traffic.
    -u <user>     User account for SSH login.
    -v            Be verbose.
    -w            Prompt for password (used for login and sudo).
    -tty          Pseudo-tty.
上面的每一项不用我单独解释,我来举个例子,
#atnodes -L -v -u root 'echo "my name is `hostname`"' '{cluster1}'
也可以单独对某一台机器进行操作:atnodes -u root 'echo "my name is `hostname`"' a.example.com
(4)tonodes将文件批量上传到集群指定位置
#tonodes /tmp/my.sh '{cluster}':/root/tmp

(5)key2nodes命令
我有很多服务器,要把公钥一个一个写道他们的autorized_keys文件,很麻烦,但是这个key2nodes命令可以很方便的帮你生成和分发密钥。如果你在机器集群上的用户名和密码都一样(一般管理集群,都有中心认证服务器吧,不然你哭死),你就可使用这个命令来帮助你,比如说我想把公钥传到 '{cluster}' 这个集合中的机器上去,我只需要:
#key2nodes -u root '{cluster}'

     以上就是这个工具的用法简介,这个是淘宝的agentzh开发的,很是强大,我用着是很爽,可以尝试的去实现一些方便的工具,希望能够对大家批量的任务有所帮助。