[shell例項]——用指令碼實現向多臺伺服器批量複製檔案(nmap、scp)

Jelly_lyj發表於2017-03-18

練習環境:

(1)所有伺服器將防火牆和selinux關閉
(2)所有伺服器的root密碼設定為aixocm
(3)所有伺服器都為10.0.100.*網段,並保證能夠和其它主機通訊
(4)所有伺服器確保sshd服務已經啟動(開放預設的22埠)

 

指令碼要求實現:

將本機/etc目錄下以conf為副檔名的檔案打包壓縮為tar.bz2,然後將此檔案複製一份到10.0.100.1-->10.0.100.254地址段上所有開啟的主機,具體路徑為/tmp/sjjy/檔案。在使用scp複製時無需手動輸入密碼。

指令碼的大概思路:

(1)Tar_etc( )函式:實現對/etc下所有*.conf目錄的打包,並判斷是否打包成功。

(2)Nmap_ip( )函式:實現掃描已開啟的主機。用nmap命令實現。並將這些主機IP寫到/mydate/ip.txt檔案中。

(3)Scp_ip( )函式:實現將壓縮包傳送到各個主機的指定目錄下。 利用了#expect命令來實現的輸入。

 

#!/bin/bash
#============================================
#function-->Tar_etc 打包/etc/*.conf下的檔案
#============================================
Tar_etc()
{
    tar jcvf /tmp/lyj.tar.bz2 /etc/*.conf  &> /dev/null
    if [ $? -eq 0 ]
    then
       echo "壓縮包打包完成"
    else
       echo "壓縮包打包失敗請檢查"
    fi   
}
#=========================================
#function-->Nmap_ip 掃描網段內開啟的主機
#=========================================
Nmap_ip()
{
    [ -f /mydate/ip.txt ]
    if [ $? -eq 0 ]
    then
        cat /dev/null >/mydate/ip.txt
    else
        touch /mydate/ip.txt
    fi
  nmap -n -sP 10.0.100.1-254 | grep 10.0.100 | awk '{print $5}' >/mydate/ip.txt 
}
#======================================
#function-->Scp_ip 複製檔案到各個主機
#======================================
Scp_ip()
{
cat /mydate/ip.txt | while read line
do
(
   /usr/bin/expect << EOF
   set time 20
   spawn scp /tmp/lyj.tar.bz2 root@$line:/tmp/sjjy
   expect {
        "*yes/no*"
          { send "yes\r";exp_continue }
        "*password:"
          { send "aixocm\r"} 
   }
   expect eof
EOF
) &>/dev/null
 
   if [ $? -eq 0 ]
   then
       echo "複製檔案到$line成功!"
   else 
       echo "複製檔案到$line失敗!"
   fi
done
}

Tar_etc
Nmap_ip
Scp_ip

 

相關文章