首页 » TSSH

TSSH

TSSH,是我加入淘宝后开发的一个Linux系统小工具。旨在集中管理多台服务器,减轻PE的负担。

tssh TSSH使用python语言开发。配置文件也采用了python语法。有以下特性:
1.容易部署。无需在被管理机器安装客户端。只需要在主控端安装TSSH即可。
2.批量执行shell。可以对多台服务器批量执行shell脚本。支持awk。
3.免密码输入。一次密码输入后,该次执行无需再输入密码。
4.支持服务器分组。可以对服务器进行分组。一次指定对一组机器进行操作。
5.串行执行。执行shell的时候,一台服务器执行完毕,再执行另外一台服务器。
6.自定义交互项。可以对需要交互的项进行定义。
7.自定义命令别名。简化命令输入。
8.自定义别名支持变量。可以在自定义别名时,使用变量。

命令参数说明:
-g 指定机器组
-h 指定单台机器
-c 要执行的命令
-o 命令相关参数
-u 登陆用户
-s 是否启用sudo。参数值[ on | off ]
部署TSSH
1.下载rpm文件 http://www.bo56.com/download/tssh-1-1.1.x86_64.rpm 
2.yum localinstall tssh-1-1.1.x86_64.rpm

下面我们通过几个场景,讲解下如何使用TSSH。
场景一:
推送/home/admin/a.txt 到host1 host2 host3 三台服务器的相同目录。
不使用TSSH,我们一般用scp进行推送。命令如下:
scp /home/admin/a.txt host1:/home/admin/a.txt
scp /home/admin/a.txt host2:/home/admin/a.txt
scp /home/admin/a.txt host3:/home/admin/a.txt

如果使用TSSH,我们可以把三个命令变成一个命令。命令如下:
tssh.py -h "host1 host2 host3" -c "scp /home/admin/a.txt host1:/home/admin/a.txt"
只需要输入一次密码,登陆其他服务器时会自动填写密码。

如果经常对host1 host2 host3三个服务器进行相同的操作,那么我们可以把这些服务器分为一组。
对服务器分组的操作如下:
编辑配置文件config.py。在group中定义一个分组
'group':{
'myhost':['host1','host2','host3'],
'empty':[]
},
注意配置文件的最后一项后面不要加逗号。
配置完后,我们就可以通过如下的命令进行执行。
tssh.py -g myhost -c "scp /home/admin/a.txt host1:/home/admin/a.txt"

如果每次推送的文件的本地目录和远程服务器目录是一样的。那我们也可以对shell命令进行简化。
自定义命令别名的操作如下:
编码配置文件config.py。在command中定义一个命令行别名。
'command':{
'scp':{'alias':'scp localhost:${p1} ${p1}', 'desc':'sync new file'}
},
配置文件中的localhost是本机的ip。如 192.168.1.103
配置完后,我们就可以通过如下命令进行批量推送。
tssh.py -g myhost -c scp -o "/home/admin/a.txt"

另外需要注意,在上面的自定义别名时,我们使用了变量。
变量${p1} 表示-o 参数值中的第一个参数值。参数值之间用空格分割。
同理,${p2}表示 第二个参数。
TSSH提供了几个内置的别名变量。
${username} 是登陆远程服务器使用的用户名。
${host} 是远程服务器主机名/ip。

场景二:
使用awk对远程服务器的nginx日志进行分析
./tssh.py -g myhost -c " grep 'ajax.php' /home/logs/search/2014/01/16/access-2014-01-16_15.log | awk '{if(\$8 == 200) print \$0}'"
注意$加\ 命令中使用单引号。

场景三:
对多台服务器批量进行yum install操作。在yum install的时候,可能需要输入Y来确认是否安装。
我们可以在配置文件中进行相关配置,以便在tssh执行过程中进行相关的交互确认。
自定义交互项,操作如下:
编辑配置文件config.py,在expect中加入如下项:
'expect':{
'Is this ok.*y/N.*:':'sys_confirm'
},
这样在执行过程中,就会有提示,是否进行安装。在一台服务器确认后,在其他服务器执行时就不用再次确认了。
Is this ok.*y/N.*: 是一个匹配模式。意思是当交互内容匹配这个模式时,需要用户进行交互操作。
sys_confirm 是一个TSSH内置函数。指定后,会提醒用户进行输入操作。
当然也可以用 Y 代替 sys_confirm。
'expect':{
'Is this ok.*y/N.*:':'Y'
},
这样,当交互内容匹配Is this ok.*y/N.*: 这个模式时,无需用户交互输入。而是直接发送一个Y到远程服务器。

32