C1imber's Blog

用shell实现对指定ip进行自动基线安全检查

字数统计: 614阅读时长: 2 min
2018/05/17 Share

用shell脚本实现对指定ip进行自动基线安全检查

最近在学习shell脚本,一直再尝试用shell实现一些有意思的东西,该脚本实现了自动上传基线脚本到指定linux服务器上运行检查,并且将检查结果文件发送到我们的机器

scp.exp:发送基线脚本到指定ip的服务器

#!/usr/bin/expect -f
set timeout 10
set host [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]
set src_file [lindex $argv 3]
set dest_file [lindex $argv 4]

spawn scp -r $src_file $username@$host:/tmp/$dest_file
expect {
     "(yes/no)?" {
             send "yes\n"
             expect "*assword:" { send "$password\n" }
     }
     "*assword:" {
             send "$password\n"
     }
}


expect "100%"
expect eof:

excute.exp:ssh登陆指定ip执行之前上传的基线脚本,并且将运行结果的文件发送回来

#!/usr/bin/expect -f 
set ip [lindex $argv 0 ]
set password [lindex $argv 1 ]
set timeout 10
spawn ssh root@$ip 
expect { 
"*yes/no" { send "yes\r"; exp_continue}
"*password:" { send "$password\r" }
}
expect {
"#*"  { send "pwd\r cd /tmp/\r ./66c221be-6ab2-ef53-1589-fe16877914f4.sh $ip\r" }
}
spawn scp root@$ip:/tmp/192.168.3.3_66c221be-6ab2-ef53-1589-fe16877914f4_chk.xml /root/autocheck/report/192.168.3.3_66c221be-6ab2-ef53-1589-fe16877914f4_chk.xml
expect {
     "(yes/no)?" {
             send "yes\n"
             expect "*assword:" { send "$password\n" }
     }
     "*assword:" {
             send "$password\n"
     }
} 
expect eof
exit

ip.list:存放需要检查的ip列表

autocheck.sh:读取ip列表,检查存活的主机,过滤出开放22端口的主机ip,调用之前写的两个脚本去自动传送基线检查脚本执行并且将结果返回回来

#!/bin/bash
for ip in `cat ip.list`
do
newip=`nmap -Pn -sS -p 22 $ip|grep "open" -B4|awk '/Nmap scan/{print $5}'`
hydra -l root -p 123456 $newip ssh|grep "password:"
if [ $? == 0 ]
then
./scp.exp $newip "root" "123456" "/root/autocheck/linux_check/66c221be-6ab2-ef53-1589-fe16877914f4.sh" "66c221be-6ab2-ef53-1589-fe16877914f4.sh"
./scp.exp $newip "root" "123456" "/root/autocheck/linux_check/66c221be-6ab2-ef53-1589-fe16877914f4.pl" "66c221be-6ab2-ef53-1589-fe16877914f4.pl"
./excute.exp $newip "123456"
else
continue
fi
done

执行./autocheck.sh后的结果
mark
可以看到report目录下就是返回来的文件,里面存放着linux基线扫描的结果
mark

还可以改进的地方,这个脚本用户名密码写死了,可以再加一个用户名密码文件,读取用户名密码登录,然后检查,这样会更有实际意义,自己会不断完善功能,希望在以后的实习中可以直接用到。

CATALOG
  1. 1. 用shell脚本实现对指定ip进行自动基线安全检查