[shell實例]——用腳本實現向多台服務器批量復制文件(nmap、scp)


練習環境:

(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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM