工作中批量部署服务,需要传输软件包或者配置,由于需要数据用户密码,没法批量分发,现采用expect批量分发。 脚本如下:

1. expect脚本

cat scp.exp

#!/usr/bin/expect
set host_ip [lindex $argv 0]
spawn scp flume.property $host_ip:/tmp/
expect {
        "yes/no" { send "yes\r";exp_continue}
        "password" { send "xxxxxx\r"}
}
expect eof
exit -onexit {
        send_user "Job has finished!"
}

2 . 批量分发脚本

for ip in `cat ips`;do
expect scp.exp $ip
done

  

解释如下:

set host_ip [lindex $argv 0]  #设置第一个位置参数host_ip expect ""       # 匹配输出的内容 exp_continue     #继续执行下面匹配