練習環境:
(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