脚本如下: 
批量建立用户的脚本cuser.sh: 



1. if [  !  $# -eq 2
2. echo "请输入用户名和密码以空格分开!"
3. exit  
4.   
5. else  
6. name="$1"
7. passwd="$2"
8. fi  
9.   
10.   
11. cat hosts | while read hosts  
12. do  
13.   
14.   
15.   
16. echo "正在$hosts上用户$name"
17. expect <<EOF  
18. spawn   ssh $hosts "useradd $name; echo $name:$passwd | chpasswd"
19. expect {  
20. "*yes/no" {send "yes\r"
21. "*password:" {send "dongliang\r"
22. }  
23.   
24.   
25. EOF  
26.   
27. echo  "成功建立"
28.   
29.   
30. done



root用户初始化脚本,initroot.sh



1. if [  ! $# -eq 2
2. echo "请输入用户密码以空格分开"
3. exit  
4. else  
5. #用户名  
6. uname="$1"
7. #密码  
8. passwd="$2"
9. fi  
10.   
11.   
12. #执行检测并安装expect模块  
13. ep=`rpm -qa | grep expect`   
14.   
15. if [ -z $ep   ] ; then  
16. "检测到你的系统,没有安装expect模块,准备执行安装"
17. 2
18.  yum install -y expect  
19.   
20. else  
21. "已经安装expect模块,3秒后,开始执行ssh文件同步"
22. 3
23. fi  
24.   
25.   
26.   
27. #公钥无ssh认证模块  
28. cat hosts | while read host  
29. do  
30.   
31.   
32.   
33. echo "当前正在向$host上传输ssh文件"
34. expect <<EOF  
35. spawn  scp -r .ssh/  $host:/$uname   
36. expect {  
37. "*yes/no" {send "yes\r"
38. "*password:" {send "$passwd\r"
39. }  
40.   
41.   
42. EOF  
43.   
44.   
45.   
46.   
47.   
48. echo "当前正在$host上进行公钥认证....."
49. sleep 2
50. expect <<EOF  
51. spawn  ssh-copy-id  -i .ssh/id_rsa.pub $host   
52. expect {  
53. "*yes/no" {send "yes\r"
54. "*password:" {send "$passwd\r"
55. }  
56.   
57.   
58. EOF  
59.   
60. echo "认证成功...."
61.   
62. done  
63.   
64.   
65.   
66.   
67. #切换root权限进行hosts文件分发  
68.   
69.   
70.   
71. echo "同步本机的hosts文件到各个机器上"
72.   
73. sleep 1
74.   
75. #同步本机的hosts文件到其他各个机器上  
76.   
77. cat hosts | while read host  
78. do  
79.   
80. scp -r /etc/hosts $host:/etc/  
81.   
82.   
83. done  
84.   
85.   
86. echo "同步hosts文件完毕"



普通用户的安装脚本,noroot.sh



1. if [ ! $# -eq 2
2.   
3. echo "请输入用户名密码以空格分开"
4. exit  
5. else  
6.   
7. #用户的名字  
8. uname="$1"
9. #用户的统一密码  
10. pd="$2"
11. fi  
12.   
13.   
14. #公钥无ssh认证模块  
15. cat hosts | while read host  
16. do  
17.   
18.   
19.   
20. echo "当前正在向$host上传输ssh文件"
21. expect <<EOF  
22. spawn  scp -r .ssh/  $host:/home/$uname   
23. expect {  
24. "*yes/no" {send "yes\r"
25. "*password:" {send "$pd\r"
26. }  
27.   
28.   
29. EOF  
30.   
31.   
32.   
33.   
34.   
35. echo "当前正在$host上进行公钥认证....."
36. sleep 2
37. expect <<EOF  
38. spawn  ssh-copy-id  -i .ssh/id_rsa.pub $host   
39. expect {  
40. "*yes/no" {send "yes\r"
41. "*password:" {send "$pd\r"
42. }  
43.   
44.   
45. EOF  
46.   
47. echo "认证成功...."
48.   
49. done



hosts文件示例:



1. 192.168.46.28
2. 192.168.46.29
3. 192.168.46.33


使用说明书:



1. 脚本主要完成的功能:  
2. 1,自动化批量建立用户  
3. 2,自动化批量双向配置SSH认证  
4. 3,测试通过Centos6.5,其他系统大同小异,如报错,可改部分代码  
5.   
6.   
7.   
8. 使用步骤:  
9.   
10. 1,配置集群的host文件,把所有机器的IP都写在hosts文件里,注意默认这几个文件解压在root根目录即可。  
11.   
12. 2,先在第一台root用户上执行 ssh-keygen -t rsa -P ''一路回车生成ssh文件  
13.   
14. 3,然后执行initroot.sh脚本,并传入root账号的用户名,密码,此脚本会首先检测系统是否安装过expect,如果没有  
15. 安装,则yum下载,如果安装过,则直接进行ssh文件拷贝,并执行公钥认证  
16.   
17. 4,执行cuser.sh脚本,并传入要建立用户的账号密码,就可以批量的在多个机器上建立用户了  
18.   
19. 5,然后拷贝root跟目下下的hosts文件和noroot.sh文件到上面建的用  
20. 户根目录下,并把权限改成用户权限  
21. 6,然后切入刚才建立的账户,同样执行第2个步骤生成ssh文件  
22.   
23. 7,最后执行noroot.sh文件,给刚才建的批量用户之间建立ssh双向无密码认证  
24.   
25. 8,至此完成,批量用户创建和SSH认证。