最近在一台物理机上同时运行64个虚拟机进行测试,但每台虚拟机的操作都是一样的,所以用脚本来操作会方便很多,但唯一的问题就是要自动登录64台虚拟机后再进行操作,利用expect能解决这个问题。
expect是用来进行自动化控制和测试的工具,在Ubuntu14的安装方法是:
# apt-get install expect
spawn:spawn命令用来启动新的进程(由spawn启动的进程的输出才可以被expect所捕获)。
expect:从进程接收字符串,通常等待进程的反馈。expect可以接收一个字符串参数,也可以接收正则表达式参数。
send:将expect 命令接受的后的与期望字符串匹配,若对应则执行相应的send命令来发送交互信息。
interact :执行完成后保持交互状态, 这时可以手动输入信息 。
expect eof :进程结束符。
一个例子:
#!/usr/bin/expect -f
set ip [lindex $argv 0 ] #接收第一个参数,并设置IP
set password [lindex $argv 1 ] #接收第二个参数,并设置密码
set timeout 10 #设置超时时间
spawn ssh root@$ip #发送ssh请滶
expect { #返回信息匹配
"*yes/no" { send "yes\r"; exp_continue} #第一次ssh连接会提示yes/no,继续
"*password:" { send "$password\r" } #出现密码提示,发送密码
}
interact #交互模式,用户会停留在远程服务器上面.