- 论坛徽章:
- 0
|
帐号密码一致的情况下用expect写个脚本
- #!/usr/bin/expect -f
- ##=====================================================================================
- # 此脚本用于批量的修改远程的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 oldassword newpasswd\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 "$user@$IP\'s password:" {
- send "$oldpasswd\r"
- } -re "current*" {
- 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 $user@$IP passwd"
- eval spawn $cmd
- login $user $IP $oldpasswd $newpasswd $failed
- }
- close $f
复制代码
[ 本帖最后由 911csj 于 2008-7-8 13:38 编辑 ] |
|