ma_be.sh
#!/bin/bash #nmap -sP 192.168.30.0/24 |grep 192|awk '{print $5}' >ip_list #掃描一個網段,將Ip地址或者主機名保存到ip_list文件中 user="watson" password="watson@123" root_passwd="*********" pwd_dir=`pwd` #獲取當前執行路徑 network=$1 #獲取腳本執行參數 #root_passwd="**********" ################################################################################## # # root用戶執行nmap命令,掃描主機 # 使用nmap -sP ################################################################################### function Root_nmap(){ if [[ $network == '' ]] then echo "請輸入一個網絡參數!"&& exit 1 fi /usr/bin/expect <<-EOF set time 60 spawn su - root expect { "*yes/no" { send "yes\r"; exp_continue } "*Password:" { send "$root_passwd\r" } } expect "*#" { send "cd $pwd_dir && bash get_ip.sh $network\r" } expect "*#" { send "exit\r" } interact expect eof EOF } ################################################################################ # # 對ip_list里面的文件進行處理,查看那些IP可以使用 # ################################################################################ function Believe_hosts(){ rm -rf $hosts && touch $hosts rm -rf $hosts_windows && touch $hosts_windows rm -rf $hosts_password_errors &&touch $hosts_password_errors rm -rf $hosts_others&& touch $hosts_others ip_num=`cat $ip_list|wc -l` #echo $ip_num&&exit for i in `seq 1 $ip_num` do #讀取ip_list里面的ip地址 ip=`cat $ip_list |sed -n $i'p'|awk '{print $1}'` #sshpass -p $password scp believe.sh $user@$ip:/tmp/ >/dev/null sshpass -p $password scp saomiao $user@$ip:/tmp/ >/dev/null re=$? #上一條命令的執行結果 if [ $re -eq 0 ] #執行結果為0,表示可以建立信任關系 then # sshpass -p $password ssh $user@$ip -o StrictHostKeyChecking=no "bash /tmp/believe.sh" echo $ip >> $hosts elif [ $re -eq 1 ] #執行結果為1,表示可能為windows機器 then echo $ip >>$hosts_windows elif [ $re -eq 5 ] #執行結果為5,表示watson密碼錯誤 then echo $ip >>$hosts_password_errors else echo "IP:$ip-----------------錯誤:$re" >>$hosts_others fi done } function Believe_make(){ ip_list=dev_host belog=belog ip_num=`cat $ip_list|wc -l` rm -rf $belog &&touch $belog for i in `seq 1 $ip_num` do #讀取iplist里面的ip地址和密碼 ip=`cat $ip_list |sed -n $i'p'|awk '{print $1}'` sshpass -p $password scp believe.sh $user@$ip:/tmp/ >/dev/null # sshpass -p $password scp saomiao $user@$ip:/tmp/ >/dev/null # echo $ip---------------------執行結果-------------$? if [ $? -eq 0 ] then sshpass -p $password ssh $user@$ip -o StrictHostKeyChecking=no "bash /tmp/believe.sh" echo $ip 成功 >> belog # echo $ip >>hosts else echo $ip 失敗 >>belog fi done } function main(){ if [ ! -d $network ] then mkdir $network fi ip_all="$network/ip_all_$network" #文件里面保存網段中所有可以ping的IP地址 ip_list="$network/ip_list_$network" #文件里面保存nmap掃描的原始數據 hosts="$network/hosts_$network" #保存Linux主機地址 hosts_windows="$network/hosts_windows_$network" #Windows主機 hosts_password_errors="$network/hosts_password_errors_$network" #保存密碼錯誤主機 hosts_others="$network/hosts_others_$network" #其他類型主機 Root_nmap #切換root用戶,並且掃描主機 Believe_hosts #得到Linux主機地址,生成host+網段文件 # Believe_make } main $1;
get_ip.sh
#!/bin/bash network=$1 ########################################################################## # 使用nmap命令掃描獲取在線IP地址 # 必須root執行 ########################################################################## function Get_IP(){ rm -rf $ip_all && touch $ip_all rm -rf $ip_list && touch $ip_list nmap -sP 192.168.$network.0/24 |grep 192 > $ip_all #獲取所有可以ping的地址 #對獲取得到的信息加工,得到單獨的IP地址 ip_num=`cat $ip_all|wc -l` for i in `seq 1 $ip_num` do lie_ip=`cat $ip_all |sed -n $i'p'` lie_nf=`echo $lie_ip |awk '{print NF}'` if [ $lie_nf -eq 5 ] then ip=`echo $lie_ip|awk '{print $5}'` echo $ip >> $ip_list elif [ $lie_nf -eq 6 ] then ip=`echo $lie_ip|awk -F"(" '{print $2}'|awk -F")" '{print $1}'` echo $ip >> $ip_list else echo "$lie_ip------------------Error!!!!!!!!" fi done chown watson:watson $network -R } function main(){ ip_all="$network/ip_all_$network" #文件里面保存網段中所有可以ping的IP地址 ip_list="$network/ip_list_$network" #文件里面保存nmap掃描的原始數據 Get_IP } main $1;
腳本運行:
在ma_be.sh輸入整個網段的統一root密碼
chmod +x ma_be.sh
./ma_be.sh 19 #掃描19網段
-----------------------------------------------------------------------------分割線-----------------------------------------------------------------------------
獲取用戶腳本
#!/bin/bash if [ $# -eq 2 ] then hosts=$1 hostname=$2 tmpfile=user1 filename=user$hostname rm -rf $tmpfile && touch $tmpfile rm -rf $filename && touch $filename ansible -i $hosts $hostname -m shell -a "cat /etc/passwd |grep bash " >$tmpfile cat $tmpfile |awk -F: '{print $1}' |awk '{print $1}' >$filename rm -rf $tmpfile else echo "腳本必須傳入參數兩個,第一個為主機文件,第二個為主機群的名稱,例如:'bash getsuer.sh hosts dev'" exit 1 fi