Gojira 哥斯拉Gojira 哥斯拉

哥斯拉爱好者的日常
生活相当无趣 我得找点乐子

github项目mssh发布(批量远程ssh执行命令的工具)

gojira.net

项目地址:https://github.com/xuewuhen/mssh

mssh is a tool for batching execute ssh commands.

1、介绍

mssh是一个批量远程ssh执行命令工具

2、对比传统ssh命令

对比传统的ssh命令优势:

1)、 go语言编写,使用最新的go语言ssh包(go1.3版ssh包)

2)、 支持多线程

3)、 原生ssh协议支持,支持密码、证书认证

4)、 支持超时(各种密码错误,内存爆,网络不通,登录异常不能登录情况,不会中断批量执行)

5)、 支持发送电子邮件告知执行结果

6)、 采用ssh做认证,更安全

7)、 内存占用少

8)、 支持不同机器同时执行不同命令或者同台机器同时执行不同命令

9)、 执行速度非常快

10)、 可以自定义超时时间

11)、 支持配置文件和命令行选项

3、mssh用法

3.1

./mssh -h 或者 ./mssh --help 或者 ./mssh help 查看命令帮助信息

mssh is a tool for batching ssh execute commands.

Usage:

 mssh [command] [options] [arguments]
The commands are: mssh version

 mssh help
The options are: -f input file(include
ip|username|password|cmd)

 -cmd   shell cmds or shell
scripts  

 -cfg   mssh config file
default for mssh.conf

 -s    
shell mode switch default for false

 -n     the
number of goroutines default for 100

 -rand  random password
mode

 -m    
send mail switch default for false

 -v    
show details
The arguments are:

 The arguments of mssh will be passed to
option cmd, will be part of cmd.

 etc:

 mssh -f file1 -cmd ls /etc /home /root
 --> ok

 mssh -f file1 -cmd ls -al /etc /home -->
bad (-al will be dealed with mssh's option, result in undefined
option)

 mssh -f file1 -cmd "ls -al" /etc /tmp /home
--> ok

 mssh -f file1 -cmd tmp.sh -s -m
 --> ok (exec shell scripts)

 ....

 more info wait for you to explore!
3.2

 ./mssh version 查看版本信息
 mssh version 0.1.3
3.3

程序所有选项如下:
-f     input file(include
ip|username|password|cmd)
-cmd    
 shell cmds or shell scripts  
cdf
-cfg     mssh config file
default for mssh.conf
-s     shell mode switch
default for false
-n     the number of
goroutines default for 100
-rand     random password
mode
-m     send mail switch
default for false
-v     show details

解析顺序:
命令行选项 >  配置文件
3.3.1

./mssh -f file  
-f file 指定ip列表文件,每个一行,此选项必须指定,否则程序会退出。
其他选项若不指定,将会使用默认选项。
3.3.2

./mssh -f file -cmd commands

-cmd 指定需要在远程机器上面执行的命令,如date等,如果不指定该选项默认使用配置文件里面的命令(echo
ok)
3.3.3

./mssh -f file -cfg conf

-cfg conf 指定mssh的配置文件,默认使用当前目录下的mssh.conf作为配置文件
此选项适合在多个配置文件之间切换的情况。
3.3.4

./mssh -f file -s -cmd tmp.sh

-s 开启shell mode,可以远程执行shell scripts,此选项需要与-cmd
xxx.sh配合使用
一般情况下不推荐使用,因为会影响执行速度
3.3.5

./mssh -f file -n 100

-n num 指定mssh的开启的线程数量,默认是100,最小为1,最大为10000。
3.3.6

./mssh -f file -rand

-rand 随机密码模式,需要与file里面的特定字段配合使用。
一般情况不会用到。
3.3.7

./mssh -f file -m -cmd commands

-m
开启发送邮件模式,如果配置文件mssh.conf里面指定了maillist=xxx,那么执行命令失败的主机ip或域名会发送给

相应的maillist。如果没有指定maillist,那么将会发送给当前登录中控的用户(如登录用户是xxx,那么邮件将会发送给xxx@xxx)。
3.3.8

./mssh -f file -v

-v 开启调试模式,将会显示详细的debug信息。
在某些情况下,对于调试命令执行失败非常有效。
3.3.9

关于配置文件说明
配置文件格式如下:

;main config section
[main]
username=root
password=rootpass
command=echo ok
;ssh timeout default 30s
timeout=30

;crypto config section
[crypto]

;mail config section
[mail]
title=mssh
body=mssh exec task
mode=text
;multiple users divided by comma
maillist=xxx,xxx
fr_addr=xxx@xxx
...

[main] //主配置部分
username=root //指定以什么用户到目标机器执行命令,默认是root
password=rootpass
//username对应的密码,默认先使用信任关系,如果没有信任关系则采用密码
command=echo ok //在目标机器上面指定的命令,默认是echo ok,可以修改为任意命令
timeout=30
 //配置ssh超时值,默认超时时间是30s,请根据需要自行调整

[crypto] //加密配置部分
暂时不支持

[mail] //邮件配置部分
title=mssh //邮件标题
body=mssh exec task  //邮件主体
mode=text  //邮件模式,支持text和html
maillist=
 //邮件接收人,默认为空,多个邮件接收人之间使用";"分隔
fr_addr=xxx@xxx  //邮件发送人地址

注:
发送邮件选项仅-m开启的时候才生效。
3.3.10

一些常见的用法:

执行命令,命令结果输出到终端

./mssh -f file -cmd "wget -O /tmp/xxx.sh http://xxx/xxx.sh
&& sh /tmp/xxx.sh"

执行命令,命令结果输出到终端,并且将执行命令出错的机器列表发送给当前登录用户

./mssh -f file -m -cmd "wget -O /tmp/xxx.sh http://xxx/xxx.sh
&& sh /tmp/xxx.sh"

重定向标准输出和标准错误到文件

./mssh -f file -m -cmd "wget -O /tmp/xxx.sh http://xxx/xxx.sh
&& sh /tmp/xxx.sh" 1> `date +%F`.log.txt 2>
 `date +%F`.err.txt

后台运行,并且将正常输出和错误输出到文件,方便后续查看

nohup ./mssh -f file -m -cmd "wget -O /tmp/xxx.sh
http://xxx/xxx.sh && sh /tmp/xxx.sh" 1> `date
+%F`.log.txt 2>  `date +%F`.err.txt &

执行shell脚本

./mssh -f file -m -s -cmd tmp.sh

执行命令(注意,mssh的非-参数,会被当成cmd的参数)

./mssh -f file -cmd "ls -al" /tmp /root

执行默认命令(echo ok)

./mssh -f file
3.3.11

高级用法:
./mssh -f file

file 文件格式1
10.1.1.1
10.1.1.2

file 文件格式2
10.1.1.1 root
10.1.1.2 guest

file 文件格式3
10.1.1.1 root rootpass
10.1.1.2 guest guestpass

file 文件格式4
10.1.1.1 root rootpass ls -al
10.1.1.2 guest guestpass  echo ok

file 文件格式5
10.1.1.1 root rootpass
10.1.1.2 guest guestpass  echo ok
10.1.1.3  
10.1.1.4 root

如果相关字段missing,那么将会使用配置文件的配置。
如:file 文件格式5 中 10.1.1.3 用户名、用户名密码、命令missing,
那么对应默认值为10.1.1.3 root rootpass echo ok
4、执行结果显示

./mssh -f ip1 -m 
**************************************** [ 1 ]
****************************************
192.168.100.1:
ok

**************************************** [ 2 ]
****************************************
192.168.100.2:
ok

**************************************** [ 3 ]
****************************************
192.168.100.3:
ok
5、安装mssh

 配置go环境
 go get -u
https://github.com/xuewuhen/mssh
 cd $GOPATH/src/github.com/xuewuhen
 cd mssh
 go build 

GOJIRA.NET原创文章未经允许不得转载! 当前页面:Gojira 哥斯拉 » github项目mssh发布(批量远程ssh执行命令的工具)

评论 1

  1. 没来得急看,应该不错,先帮你顶

    映岚 博 主 2015.12.20 17:09:42 回复