免费注册 查看新帖 |

Chinaunix

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

[其他] 使用expect批量查看多台机器的内存信息,如果密码不同,应该如何修改脚本呢? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-01-08 17:36 |只看该作者 |倒序浏览
本帖最后由 YuriGagarin 于 2014-01-09 06:55 编辑

我之前在农信社的机房工作,那里的领导曾经有一个需求,希望可以快速查看所有机器的配置信息,还有CPU、内存的运行状态等信息。机房的服务器在80台左右。
  前段时间我学了点expect脚本,便想利用这个脚本实现这个需求。昨天正式开始着手操作,感觉应该是遇到最后的问题了。
  批量查看多台机器的内存信息,如果多台机器的用户密码都一样的话,我还能完成。但是,如果密码不同,我就不知道脚本应该如何改了。
脚本1:
[root@M-SERVER fenfa_view]# cat iplist
192.168.1.179 redhat
192.168.1.180 redhat
192.168.1.181 123456
192.168.1.182 123456

脚本2:
[root@M-SERVER fenfa_view]# cat view_client_info.sh
#!/bin/sh
. /etc/init.d/functions
for ip in `cut -d " " -f1 iplist`
do
expect lipeixue.exp $ip free -m
done

脚本3:
[root@M-SERVER fenfa_view]# cat -n lipeixue.exp
     1  #!/usr/bin/expect
     2  if { $argc != 2 } {
     3   send_user "usage: expect scp-expect.exp ip command\n"
     4   exit
     5  }
     6
     7  #define var
     8  set ip [lindex $argv 0]
     9  set command [lindex $argv 1]
    10  set password [lindex $argv 2]
    11  #set password "123456"
    12
    13  spawn ssh -P22 root@$ip $command
    14  expect {
    15          -timeout 2
    16          "yes/no"    {send "yes\r";exp_continue}
    17          "*password" {send "password\r"}
    18          timeout {puts "timeout";return}
    19  }
    20  #expect eof
    21  exit
  我知道自己写的脚本3是有问题的。
  可我就是不知道是否应该在第10行加变量,还是在别的位置提取脚本1里的密码呢?
  我不知道,这密码应该如何提取了?
  请各位帮忙提点一下,谢谢。

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每月发帖之星
日期:2015-09-11 19:30:52IT运维版块每周发帖之星
日期:2015-09-11 19:20:31IT运维版块每日发帖之星
日期:2015-08-26 06:20:00每日论坛发贴之星
日期:2015-08-20 06:20:00IT运维版块每日发帖之星
日期:2015-08-20 06:20:002015年辞旧岁徽章
日期:2015-03-03 16:54:15金牛座
日期:2014-05-04 16:58:09双子座
日期:2013-12-17 16:44:37辰龙
日期:2013-11-22 15:20:59狮子座
日期:2013-11-18 22:55:08射手座
日期:2013-11-12 10:54:26
2 [报告]
发表于 2014-01-11 22:36 |只看该作者
lz 写的有点复杂了。搜下论坛里有expect while 的脚本。。

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-08-11 06:20:00
3 [报告]
发表于 2014-01-12 17:53 |只看该作者
这个,就是你要用个文本或者数据库来保存这些机器的 IP 地址和密码,然后用你的脚本来调用就可以了,用 shell 也可以的,不一定非要用expect

论坛徽章:
0
4 [报告]
发表于 2014-01-12 21:18 |只看该作者
回复 3# lijunling


谢谢楼上,已经陆续有朋友介绍一些思路,有些朋友也是用shell来修改,但我shell目前更不熟。
  正好自己刚学了点expect,也是想利用这个案例来强化一下自己的实践能力吧。
   

论坛徽章:
0
5 [报告]
发表于 2014-01-13 08:38 |只看该作者
[root@M-SERVER fenfa_view]# cat view_client_info.sh
#!/bin/sh
. /etc/init.d/functions
for ip in `cut -d " " -f1 iplist`
do
password=`grep $ip iplist|cut -d " " -f2`
expect lipeixue.exp ${ip} ${password}
done

[root@M-SERVER fenfa_view]# cat lipeixue.exp
#!/usr/bin/expect
#define var
set ip [lindex $argv 0]
set password [lindex $argv 1]

spawn ssh -P22 root@$ip free -m
  expect "password"
  send "$password\r"
  expect eof
exit
[root@M-SERVER fenfa_view]# sh view_client_info.sh
spawn ssh -P22 root@192.168.1.183 free -m
ssh: connect to host 192.168.1.183 port 22: No route to host
send: spawn id exp6 not open
    while executing
"send "$password\r""
    (file "lipeixue.exp" line
spawn ssh -P22 root@192.168.1.182 free -m
root@192.168.1.182's password:
             total       used       free     shared    buffers     cached
Mem:          1010         67        943          0          8         40
-/+ buffers/cache:         17        992
Swap:         2303          0       2303

  经过朋友的帮助,问题算是得到初步解决。但我还想再进一步,如何才能把因为主机没有开机,或者无法连接到主机产生的输出去掉,然后再输出1个简单点的输出说明呢?
  就是想把如下部分删除,或者只要这里的第1行“No route to host”也行。
ssh: connect to host 192.168.1.183 port 22: No route to host
send: spawn id exp6 not open
    while executing
"send "$password\r""
    (file "lipeixue.exp" line

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
6 [报告]
发表于 2014-02-27 11:11 |只看该作者

安装个cacti监控,看图说话,领导最喜欢了。换个思路吧

论坛徽章:
0
7 [报告]
发表于 2014-03-11 13:57 |只看该作者
主要问题就是密码不通,那么加信任授权,然后就跳过密码这一环,就可以了。
用ssh就可以批量查看,不用expect了
回复 1# YuriGagarin


   

论坛徽章:
0
8 [报告]
发表于 2014-03-18 18:35 |只看该作者
谢谢楼上2位,最近没有登录,所以也没有看到回复。
  自己的shell水平还是太低,自己再补补课,再研究这个问题吧。

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-05-30 06:20:00IT运维版块每日发帖之星
日期:2016-05-31 06:20:00
9 [报告]
发表于 2014-04-18 19:37 |只看该作者
当然是把密码也放到文件里,脚本读取就是了,我就是这样做的,很方便。

论坛徽章:
0
10 [报告]
发表于 2014-04-30 10:32 |只看该作者
安装个nagios一类的集中监控,然后配个puppet/salt一类的集中管理,自己弄个脚本分发到各个机器上
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP