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