此脚本是使用sshpass来输入密码通过密码验证,所以要求目标主机必须是相同的root密码,此脚本是一个简易脚本仅作为参考,可根据实际需求进行修改。因为密码为明文所有可能有安全性上的问题,可以尝试把密码写入系统变量再调用。

首先创建一个iplist.txt文件在脚本同目录下
touch iplist.txt
文件内容为一行一个ip,如:

192.168.1.1
192.168.1.2
......
#!/bin/bash
#  email:jevinharris@foxmail.com


set -e

# yum install -y sshpass
# apt install sshpass # 乌班图

# rm -rf ~/.ssh/id_rsa*
#  小心此句会删除原先的id_rsa密钥

ssh-keygen -t rsa -f ~/.ssh/id_rsa -q -P ""
# 生成id_rsa密钥

USER=root
SSH_PASS=admin888
KEY_PATH=~/.ssh/id_rsa.pub


#  从此文件中读取IP,一行一个地址
ip_list=$(cat ./iplist.txt)

for ip in $ip_list
do
    ssh-keygen -R $ip # 删除过期指纹
    ping -c2 $ip >/dev/null 2>&1
    if [ $? -eq 0 ];then
        echo -e "\033[33m${ip} is UP\033[0m"
        echo "======= Batch the file to the host $ip =========="	
	    sshpass -p $SSH_PASS ssh-copy-id -i $KEY_PATH "-o StrictHostKeyChecking=no" $USER@$ip &>/dev/null
        echo "$ip 密钥分发成功"
	    echo  -e "##########################END##########################\n"
    else
        echo "======= Warning host $ip =========="
        echo -e "\033[33m${ip} is DOWN\033[0m"
        echo "$ip 无法ping通,密钥分发失败"
        echo  -e "##########################FAIL##########################\n"
    fi

done