免费注册 查看新帖 |

Chinaunix

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

[系统管理] 求指教:在使用expect交互过程中,执行本地的shell命令? [复制链接]

论坛徽章:
2
数据库技术版块每日发帖之星
日期:2015-08-04 06:20:00数据库技术版块每日发帖之星
日期:2015-08-28 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-04-20 17:27 |只看该作者 |倒序浏览
我有很多账号,通过使用默认密码尝试登录到远程的ftp服务器(公司账号太多,很多人一直使用默认账号,存在安全隐患)。使用expect进行交互。当使用默认密码可以登录时,记录该账号的名字。如果不能登录,就或略。进行下一个账号测试。最后,输出结果,显示哪些账号使用默认密码。下面是我的方法,感觉比较麻烦。
[root@Test_Web_01 ~]# cat lt.sh
#!/bin/bash
#by zhaoxw
while read line                                                                                       //定义一个变量,表示按行读取account.txt. account.txt.存储所有用户账号。
do
/usr/bin/expect<<-EOF
log_file account.log            //把执行过程记录下来。
spawn  ftp 172.16.24.21
expect ":"
send "$line\r"
expect "Password:"
send "password\r"                                                             //默认密码
expect {
        "logged" {send "bye\r";send "logged$line\r"}          //send "logged$line\r"目的是为了记录能成功登录的账号,结合log文件进行分析。
        "failed" exit                                                                          //如果不能登录,就直接退出。
}
expect eof
EOF
done <raccount.txt.                                                                      //account.txt.包含所有账号,从这里输入给while循环。

执行完毕后,搜索日志文件account.log文件,其中以logged开头的就知道该用户使用默认密码的。
执行的效果如下:
spawn ftp 172.16.24.21
Connected to 172.16.24.21 (172.16.24.21).
220 Microsoft FTP Service
Name (172.16.24.21:root): hkbd
331 Password required for hkbd.
Password:
230 User logged in.                           //表明该账号使用默认密码。
bye
loggedhkbd                   //打印一条记录,表明hkbd使用默认密码登录的
Remote system type is Windows_NT.
ftp> bye
221 Goodbye.
spawn ftp 172.16.24.21
Connected to 172.16.24.21 (172.16.24.21).
220 Microsoft FTP Service
Name (172.16.24.21:root): hkzx
331 Password required for hkzx.
Password:
530 User cannot log in.                   //该用户没有使用默认密码,然后直接退出。处理下一个账号。
Login failed.

我感觉这个方法太麻烦。原因主要集中在执行expetc交互过程中,当用户可以成功登录时,无法执行本地shell命令。比如直接把当前用户添加到某个文件中。

请指点!非常感谢!


论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
2 [报告]
发表于 2015-04-21 08:42 |只看该作者
能不能根据expect命令执行返回的状态码,去判断有没有登录成功?

论坛徽章:
2
数据库技术版块每日发帖之星
日期:2015-08-04 06:20:00数据库技术版块每日发帖之星
日期:2015-08-28 06:20:00
3 [报告]
发表于 2015-04-21 15:21 |只看该作者
回复 2# cao627


    可以知道是否登录成功,关键是不知道在执行过程中,如何把这些信息写入到本地的一个文件中。

论坛徽章:
14
15-16赛季CBA联赛之辽宁
日期:2019-06-16 15:47:3515-16赛季CBA联赛之广夏
日期:2016-08-13 21:24:352015亚冠之武里南联
日期:2015-07-07 17:37:372015亚冠之萨济拖拉机
日期:2015-07-06 17:07:482015亚冠之全北现代
日期:2015-06-04 13:54:272015亚冠之城南
日期:2015-05-21 15:43:212015年亚洲杯之伊朗
日期:2015-04-25 18:20:362015年亚洲杯之伊朗
日期:2015-04-20 16:06:052015年亚洲杯之科威特
日期:2015-03-07 12:51:26丑牛
日期:2014-12-30 10:26:38申猴
日期:2014-09-28 22:40:18金牛座
日期:2014-09-13 21:12:22
4 [报告]
发表于 2015-04-21 23:19 |只看该作者
建议用python代码写这个。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP