一、shell实现100台服务器的公钥的批量分发;LLD规划:100台服务器ip为:192.168.42.101-201,root密码:123456
考虑因素:
1.如何创建秘钥
2.检查与服务器之间的通讯
3.分发秘钥
[root@backup ~]# cat keypir.sh
#!/bin/bash
password=123456
#创建秘钥对---(ssh-keygen),写入指定文件
CreateKeyPair(){
ssh-keygen -f /root/.ssh/id_rsa -P "" #-P:创建的秘钥是否设置密码,此处不设置密码。
}
#检查100台服务器网络是否畅通
CHECK(){
ping -c 1 192.168.42.$i &>/dev/null
if [ $? -eq 0 ] #$? 返回为0时,说明网络畅通
then
return 1
else
return 0
fi
}
#分发秘钥
TRACE(){
which sshpass &>/dev/null #确定sshpass是否安装,对方服务器可能没有安装
if [ $? -ne 0 ] #通过which命令判断sshpass是否安装,安装了echo $?则返回0
then #$?不为0时,则说明没有安装
yum install sshpass -y
#sshpass -p $password ssh-copy-id -o StrictKeyHostChecking 192.168.42.$i
sshpass -p $password scp -p -o StrictHostKeyChecking=no /root/.ssh/id_rsa.pub 192.168.42.$i:/tmp/
#使用sshpass工具和-o参数实现避免交互输入yes和密码
#将本地/root/.ssh/id_rsa.pub(生成的秘钥文件),传输到对应服务器上/tmp/目录下,此时不能直接传到/root/.ssh目录下,避免其他机器同样操作覆盖文件。
sshpass -p $password ssh -o StrictHostKeyChecking=no 192.168.42.$i "cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys"
#ssh连接服务器,将/tmp/下密码文件写如入/root/.ssh/authorized_keys
sshpass -p $password ssh -o StrictHostKeyChecking=no 192.168.42.</