#!/usr/bin/expect -f
##===============================* chpasswd V0.2 *===================================
# 创建日期: 2008-1-1
# 修改日期: 2008-1-15
# 版 本: V0.2
# 说 明:
# 此脚本用于批量的修改远程的linux AS4服务器的用户密码运行脚本前请先新建一个文件,把
# 要修改用户密码的Linux #
# 服务器的IP地址输入此文件中,一行一个IP地址.例:
# 192.168.x.x
# 10.0.x.x
# 用 法:
# 脚本名 主机IP表 要修改密码的用户名 旧密码 新密码
#
# 脚本执行完成后会生成一个 update-failed 文件,里面包含了密码修改失败的服务器的IP地址.
##=====================================================================================
proc warning {argc hosts} {
if {$argc<4} {
send_user "USAGE: command filename user oldpassword newpassword\n"
exit
} elseif {[file isfile $hosts]!=1} {
send_user "sorry: File $hosts not found or not in right format!\n"
exit
}
}
proc login {user IP oldpasswd newpasswd failed} {
set timeout 20
set done 1
while {$done} {
expect -re "continue connecting (yes/no)?" {
send "yes\r"
} -re " password:" {
send "$oldpasswd\r"
} -re "New|new UNIX password:" {
send "$newpasswd\r"
} -re "Permission denied, please try again." {
puts $failed $IP
break
} -re "No route to host" {
puts $failed $IP
break
} -re "Connection refused" {
puts $failed $IP
break
} timeout {
puts $failed $IP
break
} -re "service not known" {
send_user "\n"
send_user " #--------------------------------------#\n"
send_user " # Update complete! #\n"
send_user " # Please read the file update-failed #\n"
send_user " #--------------------------------------#\n"
send_user "\n"
exit
} eof { break }
}
}
set argc $argc
set hosts [lindex $argv 0]
set user [lindex $argv 1]
set oldpasswd [lindex $argv 2]
set newpasswd [lindex $argv 3]
warning $argc $hosts
set failed [open update-failed w+]
set f [open $hosts r]
while {[gets $f IP]} {
set cmd "ssh passwd $user"
eval spawn $cmd
login $user $IP $oldpasswd $newpasswd $failed
}
close $f
看看对你有没用
阅读(412) | 评论(0) | 转发(0) |