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