日常運維工作中,需要給幾十上百臺服務器批量部署軟件或者是重啓服務器等操作,這樣大量重複性的工作一定很苦惱,本文給大家提供了最基本的批量操作的方法,雖然效率不高,對於初學者來說還是好理解。由於剛開始學習寫腳本,什麼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就實現無密碼登錄了。
以下是腳本,根據自己實際情況做修改
- #!/bin/bash
- #2013-04-08
- #author myhoop
- #blog http://myhoop.blog.51cto.com
- #批量ssh認證建立
- for p in $(cat /usr2/script/ip.txt) #注意ip.txt文件的絕對路徑
- do
- ip=$(echo "$p"|cut -f1 -d":") #取ip.txt文件中的ip地址
- password=$(echo "$p"|cut -f2 -d":") #取ip.txt文件中的密碼
- #expect自動交互開始
- expect -c "
- spawn ssh-copy-id -i /root/.ssh/id_rsa.pub root@$ip
- expect {
- \"*yes/no*\" {send \"yes\r\"; exp_continue}
- \"*password*\" {send \"$password\r\"; exp_continue}
- \"*Password*\" {send \"$password\r\";}
- }
- "
- done
- #通過ssh批量執行命令
- for h in $(cat /usr2/script/ip.txt|cut -f1 -d":")
- do
- ssh root@$h '此處寫要執行的命令'
- #如果命令是多行的,請參照下面
- #ssh root@$h '此處寫要執行的命令1'
- #ssh root@$h '此處寫要執行的命令2'
- #ssh root@$h '此處寫要執行的命令3'
- done
- #ip.txt文件裏面ip和密碼寫法
- 192.168.0.2:admin2
- 192.168.0.3:admin3