首先是一个调用脚本,循环读取文本文件
文本文件格式为:ip loginuser loginpass passuser newpass
1
2
3
4
5
6
7
8
9
10
11
12
| #!/bin/bash
if [ "$1" = "" ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]
then
echo "Usage: chpasswd.sh path/iplist "
exit
fi
cat $1 | while read line
do
[ -z "$line" ] && continue
expect ~/expect/chpasswd.expect $line;
done
echo -e "\n well done\n"
|
以下是 expect 主程序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
| #!/usr/bin/expect
#登录的用户名
set loginuser [lindex $argv 1]
#密码
set loginpass [lindex $argv 2]
#要修改的用户名
set passuser [lindex $argv 3]
#要修改成的新密码
set newpass [lindex $argv 4]
set ipaddr [lindex $argv 0]
set timeout 300
set cmd_prompt "]#|~]?"
#---------------------------------------------------通过 ssh 登录
spawn ssh $loginuser@$ipaddr
set timeout 300
expect {
-re "Are you sure you want to continue connecting (yes/no)?" {
send "yes\r"
} -re "assword:" {
send "$loginpass\r"
} -re "Permission denied, please try again." {
exit
} -re "Connection refused" {
exit
} -re $cmd_prompt {
send "\r"
} timeout {
exit
} eof {
exit
}
}
#-------------------------------------------修改密码
send "sudo passwd $passuser \r";
expect {
"password for $loginuser:" {
send "$loginpass\r"
}
}
expect {
"New password:" {
send "$newpass\r"
}
"新的 密码:" {
send "$newpass\r"
}
"passwd: Only root can specify a user name." {
exit
}
}
expect {
"Retype new password:" {
send "$newpass\r"
}
"重新输入新的 密码:" {
send "$newpass\r"
}
}
#---------------------------------------------退出
expect -re $cmd_prompt
exit
|