[指令碼例項]——大批量建立信任關係+大批量分發檔案

Jelly_lyj發表於2017-03-18

驗證實驗的環境
A:10.0.2.29    --->檔案分發伺服器  --->普通使用者:user00
B:10.0.100.201 --->WEB1              --->普通使用者:user00
C:10.0.100.202 --->WEB2              --->普通使用者:user00

 


工具使用說明

                                               <工具使用說明>

一.使用者使用說明

1.工具功能
  利用此工具指令碼,可以使得管理伺服器能夠無金鑰ssh登入到下屬的全部伺服器,進而實現大批量檔案分發功能
  sshpass.sh指令碼用於完成大批量部署信任關係
  Host.sh指令碼用於提供使用者介面並實現大批量檔案分發
  
2.使用方法
請在管理伺服器上完成以下操作:

(1)安裝sshpass軟體
   原始碼下載地址:http://sourceforge.net/projects/sshpass/ 
   # tar -xvf sshpass-1.05.tar.gz
   # ./configure && make && make install  

(2)建立user00使用者並切換
   # useradd user00

(3)ssh相關設定
   # vim /etc/ssh/sshd_config
     PubkeyAuthentication yes //允許使用Key進行登入
   
   # service sshd restart

(4)生成公鑰
   # su - user00
   $ ssh-keygen
   $ cd .ssh/
   $ cat id_rsa.pub > authorized_keys
   $ chmod 644 authorized_keys 
   $ ll authorized_keys 
     -rw-r--r-- 1 user00 user00 397 7月  27 20:08 authorized_keys

(5)把指令碼和相關檔案放入管理伺服器中,執行


二.工具指令碼說明

1.使用的檔案
(1)webip.txt
   該檔案按行存放著所有管理伺服器管理的下屬伺服器IP
      
(2)pass.config
   該檔案存放著所有管理伺服器的下屬伺服器Root使用者登入密碼

2.全域性變數說明

 


sshpass.sh

#!/bin/bash
#title:批量部署ssh信任關係
#author:Jelly_lyj
#date:2016-07-27
#version:v0.1

#===========================
#Set global variable
#===========================
PWDDIR=`pwd`
Iphost=`cat $PWDDIR/webip.txt`
Passwd=`cat $PWDDIR/pass.config`

RightLog="install_right.log"
Errorlog="install_error.log"
Username="user00"

#===========================
#Fuction--->Check_errlog
#===========================
Check_error()
{
if [ $? -ne 0 ]
then
    echo "`date +%Y-%m-%d-%H:%M:%S` $1 error" >$PWDDIR/install.log
    return 1
fi
}

#=======================================
#Function--->批量部署
#=======================================
Auto_ssh()
{
for ip in $Iphost
do
  #批量建立普通使用者
  sshpass -p $Passwd ssh $ip StrictHostKeyChecking=no useradd $Username 2>/dev/null          
  Check_error useradd
     
  #批量在該使用者家目錄下建立.ssh檔案
  sshpass -p $Passwd ssh $ip StrictHostKeyChecking=no mkdir /home/$Username/.ssh  
  Check_error mkdirssh
     
  #批量傳輸公鑰
  sshpass -p $Passwd scp /home/user00/.ssh/authorized_keys  $ip:/home/$Username/.ssh  
  Check_error scpauthor
  
  #批量修改authorized_keys許可權
  sshpass -p $Passwd ssh $ip StrictHostKeyChecking=no chmod 644 /home/$Username/.ssh/authorized_keys
  Check_error chmodauthor
  
  #批量修改authorized_keys屬主屬組
  sshpass -p $Passwd ssh $ip StrictHostKeyChecking=no chown $Username:$Username /home/$Username/.ssh/authorized_keys
  Check_error chownauthor
  
done
}

#=====================
#Fucntion--->主函式
#=====================
Main()
{
  Auto_ssh
  if [ $? -eq 0 ]
  then
     exit 1
  fi
}

#==================
#入口
#==================
Main

 


Host.sh

#!/bin/bash
#title:主選單介面+遠端登入與分發檔案的功能函式
#author:Jelly_lyj
#date:2016-07-27
#version:v0.1

#=======================
#Set global variable
#=======================
WEB1="10.0.100.201"
WEB2="10.0.100.202"


#=======================
#Function--->介面選單0
#=======================
Menu_0()
{
     echo -e "\e[31;5m  * * * * * * * * * * * * * * * \e[0m"
     echo -e "\e[31;5m  *           主選單介面      * \e[0m"
     echo -e "\e[31;5m  * * * * * * * * * * * * * * * \e[0m"
     echo -e "\e[1m          1. 登入到WEB伺服器        \e[0m"
     echo
     echo -e "\e[1m          2. 檔案大批量分發          \e[0m"
     echo 
     echo -e "\e[1m          0.     退出               \e[0m"
     read -p "請選擇:"  ch0
     case $ch0 in
     1) clear
        Menu_1
     ;;
     2) clear
        Menu_2
     ;;
     0) exit 1
     ;;
     *) echo "Enter Error"
        clear
        Menu_0
     ;;
     esac
     
}    

#=======================
#Function--->介面選單1
#=======================
Menu_1()
{
     echo -e "\e[31;5m  * * * * * * * * * * * * * * * * * *\e[0m"
     echo -e "\e[31;5m  *     請選擇你要登入的WEB伺服器   * \e[0m"
     echo -e "\e[31;5m  * * * * * * * * * * * * * * * * * *\e[0m"
     echo 
     echo -e "\e[1m             1. 登入 WEB1 伺服器       \e[0m"
     echo
     echo -e "\e[1m             2. 登入 WEB2 伺服器       \e[0m"
     echo
     echo -e "\e[1m             0. 返回主選單             \e[0m"

    read -p "請選擇:"  ch1
    case $ch1 in
    1) Login_web1
    ;;
    2) Login_web2
    ;;
    0) clear
       Menu_0
    ;;
    *) echo "Enter Error"
       clear
       Menu_1
    ;;
    esac
}

#=======================
#Function--->介面選單2
#=======================
Menu_2()
{
     echo -e "\e[31;5m  * * * * * * * * * * * * * * * *\e[0m"
     echo -e "\e[31;5m  *    請根據提示選擇相關操作  * \e[0m"
     echo -e "\e[31;5m  * * * * * * * * * * * * * * * *\e[0m"
     echo
     echo -e "\e[1m             1. 分發檔案              \e[0m"
     echo
     echo -e "\e[1m             0. 返回主選單             \e[0m"
    
    read -p "請選擇:"  ch2
    case $ch2 in 
    1) clear
       Distribute
    ;;
    0) clear
       Menu_0
    ;;
    *) echo "Enter Error"
       clear
       Menu_2
    ;;
    esac
}

#=======================
#Function--->login WEB1
#=======================
Login_web1()
{
    
    sshpass ssh -o StrictHostKeychecking=no $WEB1
}

#=======================
#Function--->login WEB2
#=======================
Login_web2()
{
    
    sshpass ssh -o StrictHostKeychecking=no $WEB2
}

#====================================
#Function--->Batch Distribute file
#====================================
Distribute()
{
    echo -e "\e[1m請輸入你想要批量分發到WEB的檔案(絕對路徑):\e[0m" ; read filepath 
    echo
    echo -e "\e[1m請輸入你想要分發的位置:\e[0m" ;read batchpath
    
    #檔案/tmp/webip.txt記錄web伺服器的ip
    for ip in `cat /tmp/webip.txt`
    do
        sshpass scp $filepath $ip:$batchpath
    done   
    
}

#=======================
#Function--->主函式
#=======================
Main()
{
   clear
   Menu_0
}


#========================
#入口
#========================
Main
Host.sh

 

相關文章