批量分发公钥-整型数组比较-echo漏写m导致的错误-trap命令

trap命令用法:

https://blog.csdn.net/carolzhang8406/article/details/46504415/

https://www.doc88.com/p-582676609909.html

这部分打印内容比较重要

修改之后:

这里踩了两个坑:

1、数组比较大小,里面既有数字,又有字符串。

2、带有颜色的echo打印,漏写m,打印空字符串(或者是黑色字体也说不准)

下面是我的脚本,相对于上面图片,加了一些内容;

问题1;

knows_hosts文件里面并没有本地IP,也不可能会有。所以,数组赋值时,并没有给know[134]赋值,导致后面-eq比较时一直报错。

问题2:

漏写了m,导致echo打印错误-

#/bin/bash

#变量声明
nmap=`which nmap`
ssh_keygen=`which ssh-keygen`
ssh_copy_id=`which ssh-copy-id`
ifconfig=`which ifconfig`
user=muyang
pass=muyang
declare -a vm
declare -a know=0
declare -i i=0
lan_Ip=192.168.127.0
mask=24

#本地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"

#是否生成秘钥并发送给客户端
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
           ;;
           *)
           echo -e "\033[40;31m请根据提示信息输入您的选择!\033[0m"
         ;;
         esac
else
         echo -e "\033[40;32m检测到有可访问的主机,将进行下一步操作!\033[0m"
fi

#扫描同网段内存活主机
if [ $? -eq 0 ];then
     #reset integer i
     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
           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
     test $i -gt 0  &&  echo -e "\033[40;32m=======所有主机拷贝完毕!================================\033[0m"  ||  echo -e "\033[40;33m没有可以拷贝的主机\033[0m" 
     else
        echo -e "\033[40;31m 公钥生成错误!!!\033[0m"
fi
                                    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值