驗證實驗的環境
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