腳本如下:
批量建立使用者的腳本cuser.sh:
Shell代碼
- if [ ! $# -eq 2 ] ; then
- echo "請輸入使用者名和密碼以空格分開!"
- exit
- else
- name="$1"
- passwd="$2"
- fi
- cat hosts | while read hosts
- do
- echo "正在$hosts上使用者$name"
- expect <<EOF
- spawn ssh $hosts "useradd $name; echo $name:$passwd | chpasswd"
- expect {
- "*yes/no" {send "yes\r" ;exp_continue}
- "*password:" {send "dongliang\r" ;exp_continue }
- }
- EOF
- echo "成功建立"
- done
root使用者初始化腳本,initroot.sh
Shell代碼
- if [ ! $# -eq 2 ] ;then
- echo "請輸入使用者密碼以空格分開"
- exit
- else
- #使用者名
- uname="$1"
- #密碼
- passwd="$2"
- fi
- #執行檢測并安裝expect子產品
- ep=`rpm -qa | grep expect`
- if [ -z $ep ] ; then
- echo "檢測到你的系統,沒有安裝expect子產品,準備執行安裝"
- sleep 2
- yum install -y expect
- else
- echo "已經安裝expect子產品,3秒後,開始執行ssh檔案同步"
- sleep 3
- fi
- #公鑰無ssh認證子產品
- cat hosts | while read host
- do
- echo "目前正在向$host上傳輸ssh檔案"
- expect <<EOF
- spawn scp -r .ssh/ $host:/$uname
- expect {
- "*yes/no" {send "yes\r" ;exp_continue}
- "*password:" {send "$passwd\r" ;exp_continue }
- }
- EOF
- echo "目前正在$host上進行公鑰認證....."
- sleep 2
- expect <<EOF
- spawn ssh-copy-id -i .ssh/id_rsa.pub $host
- expect {
- "*yes/no" {send "yes\r" ;exp_continue}
- "*password:" {send "$passwd\r" ;exp_continue }
- }
- EOF
- echo "認證成功...."
- done
- #切換root權限進行hosts檔案分發
- echo "同步本機的hosts檔案到各個機器上"
- sleep 1
- #同步本機的hosts檔案到其他各個機器上
- cat hosts | while read host
- do
- scp -r /etc/hosts $host:/etc/
- done
- echo "同步hosts檔案完畢"
普通使用者的安裝腳本,noroot.sh
Shell代碼
- if [ ! $# -eq 2 ] ; then
- echo "請輸入使用者名密碼以空格分開"
- exit
- else
- #使用者的名字
- uname="$1"
- #使用者的統一密碼
- pd="$2"
- fi
- #公鑰無ssh認證子產品
- cat hosts | while read host
- do
- echo "目前正在向$host上傳輸ssh檔案"
- expect <<EOF
- spawn scp -r .ssh/ $host:/home/$uname
- expect {
- "*yes/no" {send "yes\r" ;exp_continue}
- "*password:" {send "$pd\r" ;exp_continue }
- }
- EOF
- echo "目前正在$host上進行公鑰認證....."
- sleep 2
- expect <<EOF
- spawn ssh-copy-id -i .ssh/id_rsa.pub $host
- expect {
- "*yes/no" {send "yes\r" ;exp_continue}
- "*password:" {send "$pd\r" ;exp_continue }
- }
- EOF
- echo "認證成功...."
- done
hosts檔案示例:
Java代碼
- 192.168.46.28
- 192.168.46.29
- 192.168.46.33
使用說明書:
Java代碼
- 腳本主要完成的功能:
- 1,自動化批量建立使用者
- 2,自動化批量雙向配置SSH認證
- 3,測試通過Centos6.5,其他系統大同小異,如報錯,可改部分代碼
- 使用步驟:
- 1,配置叢集的host檔案,把所有機器的IP都寫在hosts檔案裡,注意預設這幾個檔案解壓在root根目錄即可。
- 2,先在第一台root使用者上執行 ssh-keygen -t rsa -P ''一路回車生成ssh檔案
- 3,然後執行initroot.sh腳本,并傳入root賬号的使用者名,密碼,此腳本會首先檢測系統是否安裝過expect,如果沒有
- 安裝,則yum下載下傳,如果安裝過,則直接進行ssh檔案拷貝,并執行公鑰認證
- 4,執行cuser.sh腳本,并傳入要建立使用者的賬号密碼,就可以批量的在多個機器上建立使用者了
- 5,然後拷貝root跟目下下的hosts檔案和noroot.sh檔案到上面建的用
- 戶根目錄下,并把權限改成使用者權限
- 6,然後切入剛才建立的賬戶,同樣執行第2個步驟生成ssh檔案
- 7,最後執行noroot.sh檔案,給剛才建的批量使用者之間建立ssh雙向無密碼認證
- 8,至此完成,批量使用者建立和SSH認證。
轉自:http://qindongliang.iteye.com/blog/2117973