朋友你在纠结到底是使用 Puppet、Chef、SaltStack、Ansible 众多难以捉摸的管理工具吗?你还在为了部署他们翻阅书籍,查遍百度,搜遍google而烦恼吗?不必再找啦,我们了解你的需要“张SSH”能帮我们解决一切问题。他是新出先的‘集中管理运维工具’是基于Python语言开发,糅合了众多老牌运维工具的优点实现了批量配置、批量程序部署、批量运行命令等功能。
首先简单介绍一下我们正在开发的这个程序比Ansible优越在哪里:
1.在配置方面比Ansible更简单了,配置过程中在网络环境下支持一键部署。
2.功能齐全,Ansible有的功能,“张SSH”他都有。
3.输出显示更个性化!“张SSH”不仅实现了WEB图形化界面,而且配备了超一流的搜索引擎,你再也不必担心因为忘记命令而烦恼了。
4.“张SSH”采用开源代码设计如果你有能力可以做二次开发,当然也可以与我们一起探讨。
5.无需安装任何插件,授权免费使用,而且提供问题解决和远程协助等技术性服务。
一、张SSH介绍
(1)张SSH架构如下:
本软件我(张其川 Cheung Kei-Chuen)使用Python语言开发,为了实现批量的自动化运维工作而开发,与Ansible一样属于同种开发语言,当然这个由我自己开发,是我根据工作中的实际使用情况而设计,在使用感知上我认为比Ansible更为人性化,更贴近运维人的使用需求。
该程序不需要任何的插件,不需要安装客户端和服务器端,利用的是SSH协议运行。
(2)常见的工作模式
1.命令字符模式
(2)web图像化界面模式
二、下载方式
本程序已经开放源码!如果您对此软件感兴趣,请到GitHub下载,完全免费使用,并且永久免费
(1) 在您的浏览器地址栏输入: https://github.com/zhangqichuan/CheungSSH/tree/CheungSSH
(2) 现在您将看到如下页面
(3) 点击Download ZIP就可以了,然后您可以unzip CheungSSH.zip 解压即可!
三、功能大纲
1. 批量分发命令 2. 批量上传文件 3. 批量下载文件 4. 批量部署项目 5.本地脚本远程运行
更多功能,请参见《CheungSSH发布手册.docx》
功能表:
1 | 名称 | 功能解释 | 本软件 |
2 | 批量分发命令 | 在您的本地输入一条命令,程序将会自动把这些命令发送给远程多个服务器执行。 | 支持 |
3 | 批量上传文件 | 在您的本地执行获取远程服务器的文件到本地,原理跟SFTP一样,但是这里是多个服务器同时执行SFTP。 | 支持 |
4 | 批量下载文件(正则匹配) | 在您的本地执行上传远程服务器的文件到远程服务器,原理跟SFTP一样,但是这里是同时为多个服务器执行SFTP,并且支持正则表达式的匹配,比如,您想下载服务器上Tomcat在5月~8月的日志到本地查看: tomcat/logs2015-0[5-8].*.log。 | 支持 |
5 | 多线程 | 为多个服务器同时执行,这样能减少执行的时间,加快执行效率,尤其是在服务器较多的情况下。 | 支持 |
6 | 自定义输出格式 | 为了更人性化的显示执行结果, 您可以自行编写一个脚本对结果内容进行重新格式化输出,只为了方便您的查看。 | 支持 |
7 | 格式化日志入库 | 程序执行的命令和结果,都将写入日志文件中,加入您在每天早上要执行巡检CPU MEM IO DISK 的信息,比如命令:df -h|grep ‘/‘ 得到结果 96% ,那么这些结果都将会格式化的写入日志中,同事也省去了您整理输出信息的时间。 | 支持 |
8 | 命令结果返回状态判断 | 每个命令执行是否成功,成功了多少, 用时多少,都会显示。 | 支持 |
9 | su root权限 | 假如您的服务器只能以普通账户登录,而您平时又是用普通用户登录后su - root执行命令,这里也支持。 | 支持 |
10 | 结果统计 | 执行的命令条数,成功数,用时等。 | 支持 |
11 | 自助区分 | 每个服务器的返回结果,都以特定格式区分开来,方便查看。 | 支持 |
12 | 交互界面 | 可以在程序里面进行批量发送命令,就像是Linux的shell终端一样。 | 支持 |
13 | 后台运行 | 以命令的方式运行,比如您把命令写入一个脚本中,然后用crond每天早上为您自动为多个服务器巡检 .Auto_SSH_Manager_Stand_V71.0.py <<EOF \n free -m | 支持 |
14 | 模块化接口 | 每个命令功能,都是一样以模块执行,所以跟Ansible是一样的原理,但是我认为比Ansibel更人性化。 | 支持 |
15 | 二次开发 | 有API接口, 如果您想要针对您的工作进行进一步的开发,那么也是可以的。 | 支持 |
16 | 本地脚本在远程服务器运行(远程服务器没有脚本) | 您在本地编写一个脚本,或者是程序,或者是可执行文件,在远程服务器上事先不需要存在该脚本,而您可以直接在远程服务器上运行,犹如在普通的Shell终端下,先上传一个程序文件,然后在远程服务器上执行,而我们这里的区别是,无需您手动上传即可执行。 | 支持 |
17 | 自动化巡检 | 比如您可以在crontd中编写一条命令, 定时为您的多个服务器进行巡检操作,巡检的结果,将会格式化的写入本地日志。 | 支持 |
18 | 不同文件上传到不同服务器上 | 比如您部署Tomcat Weblogic集群的时候,有可能每一个Tomcat节点的配置文件都不同,那么可以采用此模式,进行上传配置文件 | 开发中 |
19 | 部署模式 | 比如您时常部署Tomcat程序 Weblogic程序等,部署的服务器需要部署完成一台才能进行下一台的操作。很多企业都是这样。 | 支持 |
20 | 密码方式登录 | 密码登陆,与Shell一样。 | 支持 |
21 | 密钥方式登录 | PublicKey登陆,与Shell一样。 | 支持 |
22 | cd切换目录 | 就像在Shell中一样,可以在与远程服务器上cd切换路径。 | 支持 |
23 | 选定执行命令失败的主机 | 如果您执行一个命令失败了,那么您可以select这些主机,然后针对这些主机运行命令。 | 支持 |
24 | 选定一个或者多个主机 | 选定一个或者多个主机运行命令。 | 支持 |
25 | 选定主机组 | 选定一个或者多个主机组运行命令。 | 支持 |
26 | sudo登陆 | sudo登陆,比如sudo su - root。 | 支持 |
四、安装部署本软件
(建议首先使用第一种,如果失败则选用第二种)
第一种方式(自动安装方式)
[ root ~]# cd CheungSSH-master
[ root ~]# ./install-CheungSSH.sh #这里用shell脚本为您自动安装,如果安装失败了,您手动安装,请确保/CheungSSH里面的程序有x执行权限哦!
第二种方式
(手动安装方式,在第一种方式失败后,您可以使用这种方式安装,如果第一种方式成功,那么久不需要使用这个方式安装)
假如,您使用自动的安装方式 ./install-CheungSSH.sh 失败了,那么请您使用如下方法手动安装
第一步:
[ root ~]# yum install -y gcc python-devel
第二步:下载ez_setup.py
http://peak.telecommunity.com/dist/ez_setup.py
第三步:
到官网下载pycrypto模块:
https://pypi.python.org/packages/source/p/pycrypto/pycrypto-2.6.1.tar.gz
到官网下载paramiko模块:
https://pypi.python.org/packages/source/p/paramiko/paramiko-1.9.0.tar.gz
第四步 解压并安装:pycrypto、paramiko
[ root ~]# tar xvf pycrypto-2.6.1.tar.gz && cd pycrypto-2.6.1 && python setup.py install
[ root ~]# tar xvf paramiko-1.9.0.tar.gz && cd paramiko-1.9.0 && python setup.py install
如果您已经安装成功了,那么下面直接可以运行程序
现在您需要修改一下配置文件,也就是指定程序如何运行,开看下一下配置文件介绍:
[root ~]# ./cheungssh_v115.py #先执行一下,会生成一些初始化配置文件
CMD>>>>exit #然后退出,就算部署好了,接下来就可以修改配置文件,就能使用啦!!
[root@1 ~]# more /cheung/conf/cheung.conf #先看看配置文件哦!
[AUTO_SSH]
Useroot=N
Timeout=3 # 指定登陆服务器的响应超时时间
RunMode=M #使用多线程运行程序
#UseKey=n # 是否使用密钥登录
#Deployment=n # 是否使用部署模式,比如在更新Tomcat,Apache 的时候,需要逐一进行部署,使用该模式后,程序会结果您指定的日志信息进行判断重启是否成功,如果成功,则自动进行下一个服务器的部署。否则会有提示
#ListenFile=/var/log/messages #使用了部署模式后,您需要制定一个日志文件, 让程序去读取您指定的关键信息
#ListenTime=60 #使用了部署模式后,程序读取您指定的日志信息时间,默认为60秒钟,如果在指定时间未读取到相关信息,则认为部署失败。
#ListenChar=Server startup #使用了部署模式后, 您指定的字符信息,如果读取到这个信息,那么就认为部署成功, 服务器将自动进行下一个部署,比如tomcat中如果出现这个字符,那么可以认为是启动成功了的,当然要排除启动后的一些404,500错误。因为这里只判断启动是否成功。
配置/cheung/conf/cheung.conf:
配置/cheung/conf/hosts:
解释:
第一列:主机地址
第二列:主机的端口
第三列:主机的登陆用户名
第四列:主机用户名的密码,如果您担心密码泄露,那么此处可以填写None
第五列:su-root的密码 ,如果您未使用Useroot,此列可以填写None
提示:
1.以上配置必须有固定的格式,否则程序将无法运行
2.如果您在密码列填写的是None,那么在您执行命令的时候程序将会询问您密码。这样可以保护安全信息。
3.由于CheungSSH是批量操作的,所以不支持交互式,比如vi,top,ping等交互命令,如果您懂得如何取消交互也可以的详细的使用手册,请到GitHub上下载。
演示一
执行一个命令uptime看下各个服务器的运行情况: (请注意,这里执行命令,与您在Linux的终端下执行命令是一模一样!这里就比Ansible的操作更简单!)
[root ~]# ./cheungSSH_Manager_Stand_V90_ISSUE.py #启动程序,如果您下载的版本不同,请ls CheungSSH 查看具体的程序名称.
另外,您还能看到的是,每次执行了命令, 我的程序都会统计:用时多少 ? 有多少服务器执行成功了?
演示二
假如您是系统管理员,每天要收集各个服务器的Disk信息,来看看我这个程序能为您做的:
1.假如,您用这个检查您的根 “/” 分区使用量 :df -h|awk ‘$NF=="/"{print $(NF-1)}‘ 看看这个命令在我的程序里如何运行:(当然,这只是一个普通的linux系统命令而已,您可以执行是mkdir /tmp/test , ps -fel 等等。。Linux系统命令)
也许此时您会觉得,这样在屏幕上显示,我没法收集起来啊?那您的担心,我完全为您考虑到了,来看下日志:
格式化日志: tail -f /cheung/logs/cheungssh.log
原始日志: tail -f /cheung/logs/cheungssh.source.log #建议您看这个日志
看到了吗?我的日志里面,已经为您记录好了每个命令的执行结果,所以,您只需要执行命令,然后就可以在日志里面提取出结果来,这样,完全不用人工监督!
演示三
批量的下载各个服务器的文件到本地来,
比如说,您要下载localhost这个服务器、127.0.0.1 这两个服务器的/var/log/messages日志文件到您的本地服务器来(当然了,我这里是演示,只能给127.0.0.1和localhost做示范哈,因为敏感问题哦!当然您可以理解成为完全不同的服务器)
演示四
批量的从多个服务器上同时下载多个文件到本地.
假如有一天,您的游戏服务器有了问题,您的领导让您把N多个服务器上的Tomcat日志从5月1日到5月8日的文件都拿到本地来让研发分析,那么这个时候,我的这个程序就能帮到您的忙了(注意哦, 是每个服务器都同时下载多个文件哦!):
看看,多个文件就从多个服务器上下载下来了哦!霸道吧?
演示五
批量上传文件到远程服务器 :
演示六
自动化部署Tomcat、Apache、Nginx、Weblogic程序:
(这个程序可是我的王牌设计哦!)
先介绍一下场景:您有100台服务器,今晚就需要部署Tomcat程序升级包,部署完了以后,需要重启Tomcat吧?
有个前提,您的领导不允许你因为部署,就全部同时停止多个Tomcat服务器,因为那样对业务会有影响!只允许同时停止一台Tomcat,那么我的这个程序就派上了用场!
首先介绍一下设计思路:一个进程去执行重启Tomcat的命令, 而另一个命令负责去监控重启后的Tomcat日志,如果日志中出现“Startup server” 字样,那么说明Tomcat就启动成功了,这个进程会告诉另外一个进程相关信息,而此时 另外的那个进程就可以对下一个服务器执行重启命令了哦!如此循环!知道重启完毕为止,当然如果重启过程中遇到错误,那么程序会询问您是否需要继续重启其他服务器?
好,我们看下演示效果:
看下真正的tomcat日志,发现,是真的启动成功了
演示七
在您本地的脚本,让他在远程服务器上运行,事先远程服务器上没有这个脚本的哦!
应用场景,比如您要对服务器执行一个脚本内容, 而事先无需让这个脚本在远程服务器上存在,只需要在本地程序上运行,就能让远程服务器上运行了哦!
来看下效果:
1.先看下我们本地脚本的内容:
[root@1 ~]# more b.sh
echo "远端服务器:"
/sbin/ifconfig|awk -F "( *)|:" ‘ {if ($0~"inet6") next; } {if($0~/127.0.0.1/) next;} $0~/inet/{print $4}‘
2.然后把上面的脚本b.sh 在程序里面执行:
演示八
选定主机组:
1. 看下/cheung/conf/hosts配置文件,已经配置了多个主机组:
[hosts1]
127.0.0.1===22===admin===admin123===None
test.com===22===root===zhang===None
[hosts2]
localhost===22===root===zhang===None
2 进入内部命令模式,使用select选定主机组,或者是主机
全部的功能已经介绍完了,看完了我的介绍,您觉得最大的感触是什么呢 ?有没有觉得我的配置很多?很繁琐?在使用的过程中,有没有像Ansible或者是Puppet一样,配置一大把参数, 一大把文件?没有吧!!
我诚意推荐您使用本软件进行自动化运维或者部署,因为Ansible比puppet更好,而我的AutoSSH比Ansible更优秀!本软件由:张其川 Cheung Kei-Chuen 全程自主开发,属于中国人的又一个运维利器!
本文出自 “linux” 博客,转载请与作者联系!
原文地址:http://10624999.blog.51cto.com/10614999/1684022