Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5287433
  • 博文数量: 1144
  • 博客积分: 11974
  • 博客等级: 上将
  • 技术积分: 12312
  • 用 户 组: 普通用户
  • 注册时间: 2005-04-13 20:06
文章存档

2017年(2)

2016年(14)

2015年(10)

2014年(28)

2013年(23)

2012年(29)

2011年(53)

2010年(86)

2009年(83)

2008年(43)

2007年(153)

2006年(575)

2005年(45)

分类: LINUX

2007-06-20 15:33:08

转载:autoexpect介绍

这里为大家简单介绍一下expect的使用,之前在网上搜索expect的相关资料,意外地发现了autoexpect这个东东,相信会超出你的期望,至少对我是这样。

春节放假的时候,被要求修改部门所有主机的密码,我们大概有100多台主机,如果一台台上去改,实在是太累也没有任何成就感,因此想到用expect来解决问题:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#!/usr/bin/expect  --
set timeout -1

if { [llength $argv] < 3} {
  puts "usage: $argv0 ip oldpasswd newpasswd"
  exit 1
}

spawn /usr/local/bin/ssh [lindex $argv 0] -p36000 -lroot

expect "assword: "
send "[lindex $argv 1]\r"
expect "#"
send "passwd\r"
expect "New password:"
send "[lindex $argv 2]\r"
expect "Re-enter new password:"
send "[lindex $argv 2]\r"
expect "#" {send "exit\r"}
expect eof
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

简单解释一下:expect是基于TCL脚本的一种脚本语言,可以使需要人工交互的一些工作自动化。expect中最重要的几个关键字就是spawn, expect, send, lindex 。

spawn 用于生成一个子进程运行命令
expect 用于期待一个字符串的出现
send 就是模拟人工输入一个字符串
lindex 可以在数组中选择某个元素

上面的脚本基本上就是创建一个ssh进程,尝试登录到指定IP,当ssh提示输入密码时,把oldpasswd发送过去,然后期待提示符"#"的出现,以此类推就可以完成所有工作。
把上面脚本保存到chg_pwd.exp,然后加上可执行权限,就可以用./chg_pwd.exp 172.16.24.57 old new修改密码了,然后写个shell脚本就可以批量修改密码了,如:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#!/bin/bash

filename=$1
while read internalip
do
  ./chg_pwd.exp $internalip $2 $3
done < $filename
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

一种语言再简单,也需要学习。然而autoexpect甚至可以自动生成expect脚本。

运行autoexpect -p就进入autoexpect创建的shell中,然后输入的命令交互都被记录下来,最后输入exit退出,expect脚本被保存在script.exp中。
下面的例子演示了通过ssh登录到一台主机然后退出。

rong@dev:~$ autoexpect -p ssh 172.16.24.57 -lroot -p36000
autoexpect started, file is script.exp
root's password:
Last login: Thu Feb 24 2005 20:00:32 +0800
Linux 2.4.20.
You have mail.
root@platform57:~# exit
logout
autoexpect done, file is script.exp
rong@dev:~$

只要再次执行 ./script.exp,就可以重复刚才运行的命令。

效果就象先录音然后回放一样。

如果对expect还不熟悉,我极力推荐去了解一下。他可以帮你自动完成很多任务,甚至可以应用于自动测试等等。
阅读(2201) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~