日常运维工作中,需要给几十上百台服务器批量部署软件或者是重启服务器等操作,这样大量重复性的工作一定很苦恼,本文给大家提供了最基本的批量操作的方法,虽然效率不高,对于初学者来说还是好理解。由于刚开始学习写脚本,什么puppt这样的高级工具还不会使用,就简单的利用shell脚本、ssh-keygen、expect来实现。希望能给各位带来帮助,不足之处还请留言指出,大家共同进步。

    首先,需要检查expect是否安装:rpm -qa|grep expect

    然后,在操作机上创建公钥:ssh-keygen 一路回车即可

    创建好之后到/root/.ssh/下就可以看到id开头的2个文件,其中id_rsa.pub就是公钥文件,需要做的就是将这个文件传送给其他机器:ssh-copy-id -i /root/.ssh/id_rsa.pub root@ip

    最后ssh root@ip就实现无密码登录了。

以下是脚本,根据自己实际情况做修改

   
   
   
   
  1. #!/bin/bash  
  2. #2013-04-08   
  3. #author myhoop  
  4. #blog http://myhoop.blog.51cto.com   
  5.  
  6. #批量ssh认证建立  
  7.  
  8. for p in $(cat /usr2/script/ip.txt)  #注意ip.txt文件的绝对路径  
  9. do   
  10. ip=$(echo "$p"|cut -f1 -d":")       #取ip.txt文件中的ip地址  
  11. password=$(echo "$p"|cut -f2 -d":") #取ip.txt文件中的密码  
  12.  
  13. #expect自动交互开始  
  14. expect -c "   
  15. spawn ssh-copy-id -i /root/.ssh/id_rsa.pub root@$ip  
  16.         expect {   
  17.                 \"*yes/no*\" {send \"yes\r\"; exp_continue}   
  18.                 \"*password*\" {send \"$password\r\"; exp_continue}   
  19.                 \"*Password*\" {send \"$password\r\";}   
  20.         }   
  21. "   
  22. done   
  23.  
  24. #通过ssh批量执行命令  
  25.  
  26. for h in $(cat /usr2/script/ip.txt|cut -f1 -d":")  
  27. do  
  28. ssh root@$h '此处写要执行的命令'    
  29. #如果命令是多行的,请参照下面  
  30. #ssh root@$h '此处写要执行的命令1' 
  31. #ssh root@$h '此处写要执行的命令2' 
  32. #ssh root@$h '此处写要执行的命令3' 
  33. done  
  34.  
  35.  
  36. #ip.txt文件里面ip和密码写法  
  37. 192.168.0.2:admin2  
  38. 192.168.0.3:admin3