LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1423|回复: 2

[请教]用expect验证口令并实现循环

[复制链接]
发表于 2004-8-4 01:20:01 | 显示全部楼层 |阅读模式
有一个口令验证程序要在root权限下进行,我用expect实现,运行结果如下:
[wang@J wang]$ myexpect
spawn su -c xrgsu
Password: 123456

XRGSupplicant 1.0.1
RuiJie Network CopyRight 2004
Please input your user name:myid
Please input your password:
Use DHCP,1-Use,0-UnUse(Default: 0):
Use default auth parameter,0-Use 1-UnUse(Default: 0):
Searching server...
Connecting server...
Authenticating...
Authenticate SUCCESSFULLY!
Please input 'unauth' to LogOff:
原码myexpect.sh:如下:
#! /usr/bin/expect
#用su身份运行命令xrgsu──一个802.1x认证程序:
spawn su -c xrgsu
#输入su密码:
expect "assword:*"
send "123456"
#supplicant
#spawn xrgsu -a
#xrgsu运行后要求用户id、pw
expect "lease input your user name:"
send "myid\r"
expect "lease input your password:"
send "mypw\r"
#xrgsu寻问是否使用默认的设置:接受默认故直接回车
expect "Use DHCP,1-Use,0-UnUse(Default: 0):"
send "\r"
expect "Use default auth parameter,0-Use 1-UnUse(Default: 0):"
send "\r"
#等待成功认证
expect "lease input 'unauth' to LogOff:"
#认证成功,开始睡觉
sleep 36000
#end
源码运行的很好,但是我想让它实现循环,在倒数第二行
sleep 36000,不要这样睡觉10h,而是希望睡觉1h之后起来,重新运行前面的所有行。如何循环,请高手指教。还有如果等待不成功(比如超时),如何重新发送请求,注意,在su后面的程序很容易跳出su身份,这是循环的一个麻烦。
在root用户下认证失败大过程如下:
[root@J wang]# xrgsu -a
XRGSupplicant 1.0.1
RuiJie Network CopyRight 2004
Please input your user name:123456
Please input your password:
Use DHCP,1-Use,0-UnUse(Default: 0):
Use default auth parameter,0-Use 1-UnUse(Default: 0):
Searching server...
Connecting server...
Authenticating...

您的用户名不存在(User
Authenticate FAIL!
xrgsu exit!
[root@J wang]#
认证失败不管什么原因,结果都会退出xrgsu程序,并以最后一行为共同标志。
发表于 2004-8-4 01:31:28 | 显示全部楼层
不了解expect, 不过论坛里有个expect的手册,里面讲了一些for循环的东东,
看是否对你有帮助!  ;)
http://www.linuxsir.cn/bbs/showthread.php?threadid=96229
 楼主| 发表于 2004-8-4 01:38:27 | 显示全部楼层
这些功能其实也没什么很大的实用价值,因为认证成功之后不需要再主动认证,每隔10分钟会被认证机呼叫,程序没有退出的话它会自动应答,只有在网络中断和主机失去联系之后才会被踢出而需要重新认证。

那个手册我也看来,还看了man,似乎因为格式的原因失败,我用linux不到一个月,这是我的第一个shell,但是我并不想深入,因为我不是搞这行的,搞不出来就算了,我也不那么的需要它的完美。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表