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