ssh基于key验证-V1.0

内容纲要

脚本内容:

#!/bin/bash
#
#*********************************************
#Author:                zhang
#QQ:                    200957079
#URL:                   ztunan.top
#Date:                  2022-10-11
#Filename:              ssh_key_linux.sh
#Description:           The test script
#*********************************************
#设置命令执行结果颜色
color () {
        RES_COL=60
        MOVE_TO_COL="echo -en \\033[${RES_COL}G"
        SETCOLOR_SUCCESS="echo -en \\033[1;32m"
        SETCOLOR_FAILURE="echo -en \\033[1;31m"
        SETCOLOR_WARNING="echo -en \\033[1;33m"
        SETCOLOR_NORMAL="echo -en \E[0m"
        echo -n "$1" && $MOVE_TO_COL
        echo -n "["
        if [ $2 = "success" -o $2 = 0 ] ;then
                ${SETCOLOR_SUCCESS}
                echo -n $" OK "
        elif [ $2 = "failure" -o $2 = "1" ] ;then
                ${SETCOLOR_FAILURE}
                echo -n $"FAILED"
        else    
                ${SETCOLOR_WARNING}
                echo -n $"Warning"
        fi
        ${SETCOLOR_NORMAL}
        echo -n "]"
        echo
}

#判断命令是否执行成功

judge () {
        judge=`echo $?`

        if [ ${judge} = 0 ] ;then
                color "执行成功" ${judge}
        else 
                color "执行失败,请检查" 1
        fi  
}

#网段内主机密码,如果主机密码不统一,建议把主机IP/账号/密码/放入一个文件中,使用awk取出

PASS=xx..1027
#设置网段最后的地址,4-255之间,越小扫描越快

END=140

#取出IP段前三位

IP=`ip a s eth0 | awk -F'[ /]+' 'NR==3{print $3}'`
NET=${IP%.*}.

. /etc/os-release

echo "删除本机私钥"
rm -f /root/.ssh/id_rsa
[ -e ./SCANIP.log ] && rm -f SCANIP.log
judge

echo "扫描存活主机并记录在SCANIP.log中"
for((i=3;i<="$END";i++));do
    ping -c 1 -w 1  ${NET}$i &> /dev/null  && echo "${NET}$i" >> SCANIP.log &
done
wait
judge

ssh-keygen -P "" -f /root/.ssh/id_rsa &>/dev/null
echo "系统为${ID},正在安装软件包,请等待。。。"
if [ $ID = "centos" -o $ID = "rocky" ];then
    rpm -q sshpass &>/dev/null || yum -y install sshpass &>/dev/null
else
    dpkg -i sshpass &> /dev/null || apt -y install sshpass &>/dev/null
fi
judge

echo "文件复制中。。。"
sshpass -p $PASS ssh-copy-id -o StrictHostKeyChecking=no $IP  &> /dev/null

AliveIP=(`cat SCANIP.log`)
for n in ${AliveIP[*]};do
    sshpass -p $PASS scp -o StrictHostKeyChecking=no -r /root/.ssh root@${n}: &>/dev/null
done

#把.ssh/known_hosts拷贝到所有主机,使它们第一次互相访问时不需要输入回车
for n in ${AliveIP[*]};do
    scp /root/.ssh/known_hosts ${n}:.ssh/
done
judge

执行结果:

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注