此脚本是使用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