expect用于自动化地执行linux环境下的命令行交互任务,例如scp、ssh之类需要用户手动输入密码然后确认的任务。有了这个工具,定义在scp过程中可能遇到的情况,然后编写相应的处理语句,就可以自动地完成scp操作了。使用expect工具需要先行进行安装,可以使用apt-get或pacman这些包管理工具去获取安装,或者到expect开源项目的网站:http://expect.sourceforge.net/ 来获取。
expect中最关键的四个命令:
send:用于向进程发送字符串命令
expect:从进程接收字符串
spawn:启动新的进程
interact:允许用户交互,执行完操作之后留在远程服务器上。
1.expect执行ssh登录远程主机
#!/usr/bin/expect # 指明expect的执行路径
set user [lindex $argv 0]
set passwd [lindex $argv 1]
set hostip [lindex $argv 2]
spawn ssh $user@$hostip #ssh登录主机
expect {
"yes/no" {send "yes\r";exp_continue} #匹配是否有提示yes/no,如果有,发送yes,exp_continue表示如果前面的条件没有被匹配,继续执行下一步。
"*paasword" {send "$passwd\r"} #回显出现paasword让输入密码。直