您的位置:首页 > 其它

用expect解决交互问题,批量在服务器上做同样操作

2012-04-20 16:17 176 查看
许多人问了批量怎么修改linux服务器密码等问题,主要是解决ssh登陆交互的问题,除了做key等办法外,还有就是利用expect来解决,大多数情况,需要批量在服务器上相同操作的时候,都可以借用此脚本 ,所以我在此也记录下我找资料调试后的脚本,方便使用.

例如:批量在服务器上新建一个目录,"mkdir -p /root/new_directory".

expect的脚本如下(此脚本作用在于解决交互问题,并且执行所需操作):

#!/usr/bin/expect

#Filename: mkdir_expect

set loginuser "root"

set loginpass "feifei"

set ipaddr [ lrange $argv 0 0]

set timeout 300

set cmd_prompt "]#|~]?"

spawn ssh $loginuser@$ipaddr

set timeout 300

expect {

-re "Are you sure you want to continue connecting (yes/no)?" {

send "yes\r"

} -re "password:" {

send "$loginpass\r"

} -re "Permission denied,please try again." {

exit

} -re "Connection refused" {

exit

} timeout {

exit

} eof {

exit

}

}

expect {

-re "password:" {

send "$loginpass\r"

}

-re $cmd_prompt {

send "\r"

}

}

#sleep 1

expect "#"

send "mkdir -p /root/new_directory\r"

expect -re $cmd_prompt

exit

##################################################################

下面是shell脚本,简单调用expect.

#!/bin/bash

EXPECT="/usr/bin/expect"

MK_EXPECT="/root/shellscripts/mkdir_expect"

for ip in `cat /root/shellscripts/ip_list | awk '{print $2}'`;do

ping -c 1 "$ip" > /dev/null 2>&1

if [ $? -eq 0 ];then

"$EXPECT" "$MK_EXPECT" "$ip"

echo "$ip" is ok! > log/run.log

else

echo "$ip" is death! > log/run.log

fi

done
本文出自 “王海鹏” 博客,谢绝转载!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: