免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 21464 | 回复: 8
打印 上一主题 下一主题

利用SecureCRT脚本,实现对万台服务器的批量管理 [复制链接]

论坛徽章:
3
丑牛
日期:2014-02-25 15:19:10金牛座
日期:2014-02-28 19:01:322015亚冠之西悉尼流浪者
日期:2015-06-10 15:01:09
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-12 14:04 |只看该作者 |倒序浏览
本帖最后由 pxf520 于 2011-08-12 16:38 编辑

如果你想对n台服务器进行批量管理,从而提高效率,本文或许对你有些帮助

SecureCRT是一款终端仿真程序,支持ssh、Telnet和rlogin协议,可以在windows平台通过它对unix、linux进行访问,相比同类软件,它的强大之处就在于支持vbs、js等脚本,利用脚本可实现批量操作,如:获取服务器相关信息、部署软件、修改密码、升级软件、上传/下载、修改文件等等,还能生成excel报表
最大的优点,就是无需在服务器端安装agent,这是其他软件无法与之相媲美的,当初在给工行做项目的时候,在3000多台服务器上部署软件,用的就是SecureCRT脚本


下面分享一个例子:该脚本用vbs语言编写,脚本会读取iplist文件,通过ssh方式连接服务器,在centos5.5_64bit系统上自动安装lrzsz软件,脚本对目标服务器进行了判断,如已经安装lrzsz软件则退出,否则执行安装程序。

SecureCRT-vbs脚本使用说明

一.脚本运行环境
1.        需要在客户端安装SecrueCRT软件

二.脚本使用方法
1.打开SecureCRT,不连接任何会话


2.选择脚本菜单----执行,选择你要运行的脚本,
如弹出下面的提示,选择接受并保存。


3.脚本执行过程中,最好不要进行其他操作,脚本执行完后会自动退出
三.自动安装脚本参数介绍:
  outputpath = ".\install-log.txt"   '输出文件,脚本运行后会自动创建
  iplistpath = ".\ip.txt"    'ip列表文件,需提前创建,每行有2列,用1个空格作为分隔符,首尾不能有多余的空格或其他字符,iplist格式如下:

192.168.0.1 123456
192.168.0.2 abcd1234


  loginuser = "root"   '登陆用户
  productpath = "/usr/local/src"    '产品路径,可自行定义


Ssh、Main部分都已写成函数,一般情况下无需更改。你需要的是维护脚本具体执行相关功能部门的函数即可。
  1. # $language = "VBScript"
  2. # $interface = "1.0"

  3. ' Written by Peng Xiaofeng
  4. ' @ 201107
  5. ' QQ:5876006

  6. Const ForReading = 1
  7. Const ForWriting = 2

  8. Dim fso, outputpath , iplistpath , file, iplist, Str, StrIp, StrPwd
  9. Dim loginuser
  10. Dim index , index1 , n ,productpath

  11. '======================path and some parameters ==========================================
  12.   outputpath = ".\install-log.txt"   '输出文件
  13.   iplistpath = ".\ip.txt"    'ip列表文件,每行有2列,用1个空格作为分隔符,首尾不能有多余的空格
  14.   loginuser = "root"   '登陆用户
  15.   productpath = "/usr/local/src"    '产品路径
  16. '=======================define end=================================================

  17. '=======================open file==================================================
  18. Set fso = CreateObject("Scripting.FileSystemObject")
  19. Set file = fso.OpenTextFile(outputpath , ForWriting, True) ' result file path
  20. Set iplist = fso.OpenTextFile(iplistpath , ForReading, False) ' ip-list file path
  21. '========================end open==================================================

  22. '==============================================ssh start===================================================
  23. Sub Ssh(ip)

  24.                 crt.Screen.Synchronous = True
  25.                 On Error Resume Next
  26.                
  27.                 cmd = "/ssh2 /L " & loginuser &" /PASSWORD " & StrPwd & " /C 3DES " & ip
  28.                 crt.Session.Connect cmd
  29.                
  30.                 If Err.Number <> 0 Then
  31.                         file.Write " Can't connect 22 port:" & vbCr
  32.                         index = 99
  33.                         crt.Session.Disconnect
  34.                 Else
  35.                           Do
  36.                                   index = crt.Screen.WaitForStrings("#" , ">" , 10)
  37.                                   Select Case index
  38.                                                   Case "0"
  39.                                                                 file.Write "login fail:" & loginuser
  40.                                                                 index = 99
  41.                                                             Exit Do
  42.                                                   Case "1"
  43.                                                                 index = 100
  44.                                                                 Exit Do
  45.                                                   Case "2"
  46.                                                                 index = 100
  47.                                                                 Exit Do
  48.                                   End Select
  49.                           Loop
  50.                           If index <> 100 Then
  51.                            crt.Session.Disconnect
  52.                           End If
  53.                 End If
  54. End Sub
  55. '==============================================ssh end========================================================

  56. '==============================================install begin==================================================
  57. Sub Install

  58. crt.Sleep 1000
  59. crt.Screen.Send "cd " & productpath & vbCr
  60.     crt.Screen.Send "LANG=en_US.UTF-8;export LANG" & vbCr
  61.                 crt.Sleep 1000                                                                            
  62.                 crt.Screen.Send "LC_ALL=en_US.UTF-8;export LC_ALL" & vbCr
  63.                 crt.Sleep 1000                                                                                                                                                                                                                                                                                                                                                                                                             
  64. crt.Screen.Synchronous = False                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
  65. crt.Screen.Send "uname -rsm" & vbCr     '判断系统版本                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
  66. Do            
  67.         index1 = crt.Screen.WaitForStrings("Linux 2.6.18-194.el5 x86_64", "Linux 2.6.9-55.ELsmp i686", "Linux 2.6.18-194.el5 i686", "Linux 2.6.18-164.ESX x86_64", 5)                                                                                                                                                                                                                                                                                                                                                                                                                                
  68.         Select Case index1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
  69.                         Case "0"                                                                                                                                                                                                                                                                                                                                                                                                                                                       
  70.                             Exit Do                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
  71.                         Case "1"
  72.                         'CENTOS5.5 64bit
  73.                                                                 crt.Screen.Send "wget ftp://ftp.sunet.se/pub/Linux/distributions/centos/5.6/os/x86_64/CentOS/lrzsz-0.12.20-22.1.x86_64.rpm" & vbCr
  74.                                                                 crt.Sleep 12000
  75.                                                                 crt.Screen.Send "ls" & vbCr
  76.                                                                 crt.sleep 1000
  77.                                                                 Exit Do
  78.                         Case "2"
  79.                                 'RHEL4U4 32bit
  80.                                                                 crt.Screen.Send "ls" & vbCr
  81.                                                                 crt.sleep 1000
  82.                                                                 Exit Do                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
  83.                         Case "3"
  84.                          'CENTOS5.5 32bit
  85.                                                                 crt.Screen.Send "ls" & vbCr
  86.                                                                 crt.sleep 1000
  87.                                                                 Exit Do      
  88.                         Case "4"
  89.                                 'ESX 4.1 64bit
  90.                                                                 crt.Screen.Send "ls" & vbCr
  91.                                                                 crt.sleep 1000
  92.                                                                 Exit Do
  93.                 End Select                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
  94. Loop

  95. If index1 = 0 Then                                                                                                                            
  96. file.Write " time out! : Cann't confirm os version! "                                                                                                                                  
  97. Else                                                                                                                                                    
  98. crt.Screen.Send "rpm -qa|grep  rzsz" & vbCr   '判断lrzsz是否安装                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
  99. If crt.Screen.WaitForString("lrzsz", 5) = True Then
  100.         file.Write " lrzsz Exists "
  101. Else
  102.         crt.Screen.Send "ls" & vbCr     
  103.               crt.sleep 1000                                                                                                                                                                                                                                                                                                                                                                                                                                            
  104.                                 crt.Screen.Send "rpm -ivh lrzsz-0.12.20-22.1.x86_64.rpm"        & vbCr  '执行安装命令
  105.                            crt.sleep 3000          
  106.                            crt.Screen.Send "ls /usr/bin/rz" & vbCr
  107.                            If crt.Screen.WaitForString("/usr/bin/rz", 5) = True Then  '判断是否安装成功
  108.                            file.Write "lrzsz install success"   '结果写进输出文件中
  109.                            crt.Screen.Send "rm -f lrzsz-0.12.20-22.1.x86_64.rpm"        & vbCr   '删除安装程序
  110.                            crt.sleep 1000
  111.                            Else
  112.                                  file.Write "lrzsz install fail"
  113.                            crt.sleep 1000
  114.                            End If                                                                                   
  115. End If                                                                                                                                        
  116. End If                                                                                                                                                                                                                                                                                                                                                                                                                         
  117. crt.Screen.Send "exit" & vbCr
  118. End Sub
  119. '==============================================install end=================================================

  120. '==============================================Main begin==================================================
  121. Sub Main

  122.   Do While iplist.AtEndOfStream <> True
  123. '逐行读取iplist文件,分别赋予2个变量StrIp和StrPwd
  124.                 Str = iplist.Readline
  125.                 n = InStr(Str, " ")
  126.                 StrIp = Left(Str, n)
  127.                 n = Len(Str) - n
  128.                 StrPwd = Right(Str, n)
  129. '下面的把结果写到输出文件中                 
  130.                 file.Write "Ip:" & StrIp & "-"
  131.                 Ssh StrIp
  132.                
  133.                 If index = 99 Then                                                             
  134.                 crt.Sleep 1000
  135.                 Else
  136.                 crt.Screen.Send "id " & vbCr
  137.                         If crt.Screen.WaitForString("uid=0", 3) = True Then
  138.                                 crt.Sleep 1000
  139.                                 Install   '执行install过程
  140.                         End If
  141.                 End If
  142.                 crt.Session.Disconnect                                                                                                                                                                                                                                                                                                                                                                                                                                                        
  143.                 file.Write vbCrLf
  144.   Loop
  145. End Sub
  146. '===============================================Main end===================================================
复制代码
附件: SecureCRT脚本.zip (35.12 KB, 下载次数: 935)

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
2 [报告]
发表于 2011-08-12 14:28 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
3
丑牛
日期:2014-02-25 15:19:10金牛座
日期:2014-02-28 19:01:322015亚冠之西悉尼流浪者
日期:2015-06-10 15:01:09
3 [报告]
发表于 2011-08-12 14:32 |只看该作者
谢谢楼主,VBS看不懂。
zooyo 发表于 2011-08-12 14:28



    VBS不难的,把常用的几个参数了解了就ok了

论坛徽章:
0
4 [报告]
发表于 2011-08-12 15:58 |只看该作者
回复 1# pxf520


    谢谢分享~这个脚本如何使用啊

论坛徽章:
3
丑牛
日期:2014-02-25 15:19:10金牛座
日期:2014-02-28 19:01:322015亚冠之西悉尼流浪者
日期:2015-06-10 15:01:09
5 [报告]
发表于 2011-08-12 16:31 |只看该作者
本帖最后由 pxf520 于 2011-08-12 16:39 编辑
回复  pxf520


    谢谢分享~这个脚本如何使用啊
shplpy 发表于 2011-08-12 15:58


下载附件,里面有脚本和使用说明

论坛徽章:
0
6 [报告]
发表于 2012-06-04 10:36 |只看该作者
这又是一种新的批量管理方法,受教了。

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
7 [报告]
发表于 2012-06-04 12:31 |只看该作者
回复 6# laolinux


    SecureCRT 有一个功能类似于 expect 的等待字串的功能,做为 windows 下的 expect 也不错。

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
8 [报告]
发表于 2012-06-04 12:33 |只看该作者
如果脚本不需要交互的话,可以设置 crt.show 0,隐藏窗口执行,我的一些下载日志和服务器状态统计的 SecureCRT 脚本就是隐藏窗口执行的,加入计划任务后自动执行,一点也不产生干扰。

论坛徽章:
3
丑牛
日期:2014-02-25 15:19:10金牛座
日期:2014-02-28 19:01:322015亚冠之西悉尼流浪者
日期:2015-06-10 15:01:09
9 [报告]
发表于 2012-07-12 15:43 |只看该作者
seesea2517 发表于 2012-06-04 12:33
如果脚本不需要交互的话,可以设置 crt.show 0,隐藏窗口执行,我的一些下载日志和服务器状态统计的 Secure ...



您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP