nmap:https://blog.csdn.net/tk86935367/article/details/8352015
#/bin/bash
#變量聲明
nmap=`which nmap`
ssh_keygen=`which ssh-keygen`
ssh_copy_id=`which ssh-copy-id`
ifconfig=`which ifconfig`
ssh=`which ssh`
user=muyang
pass=muyang
declare -a vm
declare -a know=0
declare -i i=0
lan_Ip=192.168.127.0
mask=24
trap "" HUP INT QUIT TSTP
#本地IP獲取
local_ip=`$ifconfig ens33 | grep netmask | awk '{print $2}'`
#echo -e "\033[40;32m================信號捕捉開始====================\033[0m"
#trap "" HUT,INT,QUIT,TSTP
#掃描可以訪問的主機
echo -e "\033[40;34m=======================開始搜索可以遠程訪問的主機=============\033[0m"
for own in $(cat /root/.ssh/known_hosts |cut -d " " -f 1 |cut -d "." -f 4)
do
echo "192.168.127.${own}......."
know[$own]=1
i=$(( $i+1 ))
done
echo
echo -e "\033[40;34m=======================搜索完畢=================================\033[0m"
#flag=1
#while [ $flag -eq 1 ]
#是否生成祕鑰併發送給客戶端
#do
if [ $i -eq 0 ]
then
echo "檢測到沒有可訪問的主機;是否要生成公鑰併發送至遠程客戶端?(y/n)"
read option
case $option in
"y"|"yes")
$ssh_keygen
;;
"n"|"no")
echo -e "\033[40;33m若您無法解決當前問題,請聯繫管理員!!\033[0m"
#exit
;;
"yang")
exit
;;
*)
echo -e "\033[40;31m請根據提示信息輸入您的選擇!\033[0m"
;;
esac
else
fi
#done
#掃描同網段內存活主機
if [ $? -eq 0 ];then
#reset integer i
k=0
i=0
echo -e "\033[40;33m==================即將掃描同網段內存活主機====================\033[0m"
for ip_add in $(${nmap} -sP ${lan_Ip}/${mask} | grep report | grep -v 127.1$ | grep -v 127.2$ | grep -v 127.254$ | cut -d " " -f 5)
do
if [ $ip_add != $local_ip ]
then
vm[$k]=${ip_add}
k=$(( $k+1 ))
fi
tial=`echo "$ip_add" | cut -d "." -f 4`
#echo $tial
#echo ${know[${tial}]}
if [ -z ${know[${tial}]} ]
then
know[${tial}]=0
fi
if [ ${know[${tial}]} -eq 0 -a "${ip_add}" != "${local_ip}" ]
then
echo -e "\033[40;33m ==================即將將公鑰拷貝到主機${ip_add}上============="
$ssh_copy_id ${user}@$ip_add
#vm[$i]=$ip_add
i=$(( $i+1 ))
echo -e "\033[40;32m ==================公鑰拷貝成功============================\033[0m"
fi
done
#echo $i
else
echo -e "\033[40;31m 公鑰生成錯誤!!!\033[0m"
fi
#加下來是核心部分
#打印菜單欄
memset(){
j=0
for prin_ip in ${vm[@]}
do
if [ $prin_ip != ${local_ip} ];then
echo -e "\033[40;34m ${j}----------${prin_ip}\033[0m"
j=$(( $j+1 ))
fi
done
}
#echo ${vm[@]}
tput=`which tput`
#trap "" HUP INT QUIT TSTP
while true
do
$tput clear
memset
#echo $m
read -t 20 -p "請輸入你的選擇: " inf
if [ $inf == "yang" ]
then
exit
else
test -z ${vm[$inf]} && echo "您的輸入有誤,請重新輸入" || $ssh $user@${vm[$inf]}
fi
done