[oracle@OAPRIMARY shell]$ cat expect.sh
while read line
do
user=`echo $line | awk '{print $1}'`
ip=`echo $line |awk '{print $2}'`
passwd=`echo $line | awk '{print $3}'`
#把shell中的$user $ip $passwd参数传递给expect脚本
expect expect2.exp $user $ip $passwd
done < name.tmp
[oracle@OAPRIMARY shell]$ cat expect2.exp
#!/usr/bin/expect
# 设置超时时间为 60 秒
# set timeout 60
# 设置要登录的主机 IP 地址
# set host=$host
# 设置以什么名字的用户登录
# set ip=$ip
# 设置用户名的登录密码
# set passwd=$passwd
#把shell的参数传递给expect脚本
set user [lindex $argv 0]
set ip [lindex $argv 1]
set passwd [lindex $argv 2]
#spawn 一个 ssh 登录进程
spawn ssh $user@$ip
# 等待响应,第一次登录往往会提示是否永久保存 RSA 到本机的 know hosts 列表中;等到回答后,在提示输出密码;之后就直接提示输入密码
expect {
"(yes/no)?" {
send "yes\n"
expect "assword:"
send "$passwd\n"
}
"assword:" {
send "$passwd\n"
}
}
# 下面测试是否登录到
expect "$"
send "df -h\n"
send "tail -10 /oracle/app/admin/perass/bdump/alert_perass.log\n"
send "exit\r"
expect eof
#send "uname\n"
# expect "Linux"
# send "df -h\n"
# 这里使用了 interact 命令,使执行完程序后,用户可以在 $host 终端进行交互操作。
[oracle@OAPRIMARY shell]$
[oracle@OAPRIMARY shell]$ cat name.tmp
oracle 10.3.1.51 xxx
oracle 10.3.1.52 xxx
oracle 10.2.1.42 xxx
root 10.3.1.54 xxx
root 10.3.1.55 xxx