许多人问了批量怎么修改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
用expect解决交互问题,批量在服务器上做同样操作
原创wanghaipeng 博主文章分类:shell ©著作权
©著作权归作者所有:来自51CTO博客作者wanghaipeng的原创作品,谢绝转载,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
MQTT服务器连接不上的问题
解决客户端连不上MQTT服务器的问题
Ubuntu 22.04.3 LTS 阿里云 mosquitto MQTT 1883 -
expect交互批量添加用户
expect交互批量添加用户
expect交互批量添加用户 -
sshpass+expect解决交互式问题
sshpass+expect解决交互式问题
解决 expect sshpass -
浅谈android和js的交互问题
现在很多app里面很多功能都用html5实现,也就是用webview加载html显示一些 图文信息。这么做的好处就是减少开发成本 ,一套html在android
android js交互 android webview webview js android调用js js调用android -
与word、excel交互问题总结
不同版本的Office对应的型号不同,往往问题出现在注册表中有多个版本,所以程序运行经常提示错误。 1、找不到引用microsoft.office.core解决办法 (引用中有感叹号,说明引用不成功) 2、无法将类型为……的 COM 对象强制转换为接口类型(问题出现在注册表有多个版本,多余版本全部删
与word、excel交互问题总结 强制转换 microsoft 不同版本 感叹号