一、前言¶
本文主要介绍编写Shell脚本实现一键创建密钥对及分发密钥对。
二、脚本¶
2.1 编写脚本¶
[root@harbor01 ~]# cat /scripts/fenfakey.sh
#!/bin/bash
# author: zq
# desc: 一键创建密钥对及分发密钥对
# version: v1.0
# 0、变量
passwd="123456"
ips="192.168.1.37 192.168.1.66"
. /etc/init.d/functions
# 1、判断是否联网
ping -c 1 8.8.8.8 > /dev/null 2>&1
if [ $? -eq 0 ]; then
action "目前环境可以联网" /bin/true
else
action "目前环境不可以联网" /bin/false
fi
# 2、判断是否存在sshpass命令
if command -v sshpass > /dev/null 2>&1; then
action "sshpass 已经安装." /bin/true
else
action "sshpass 未安装,尝试安装..." /bin/false
# 使用适合你系统的包管理器进行安装
if command -v apt-get > /dev/null 2>&1; then
sudo apt-get install -y sshpass
elif command -v yum > /dev/null 2>&1; then
sudo yum install -y sshpass
elif command -v pacman > /dev/null 2>&1; then
sudo pacman -S --noconfirm sshpass
else
action "无法确定系统的包管理器,请手动安装 sshpass." /bin/false
exit 1
fi
# 再次检查是否安装成功
if command -v sshpass > /dev/null 2>&1; then
action "sshpass 安装成功." /bin/true
else
action "无法安装 sshpass,请手动安装." /bin/false
exit 1
fi
fi
# 3、创建密钥对
if [ -f ~/.ssh/id_rsa ]; then
echo "已经创建密钥对"
else
echo "正在创建密钥对..."
ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' &>/dev/null
if [ $? -eq 0 ]; then
action "密钥创建成功" /bin/true
else
action "密钥创建失败" /bin/false
fi
fi
# 4、通过循环发送公钥
for ip in $ips
do
sshpass -p "${passwd}" ssh-copy-id -i ~/.ssh/id_rsa.pub -o StrictHostKeyChecking=no $ip &>/dev/null
if [ $? -eq 0 ]; then
action "$ip 公钥分发 成功" /bin/true
else
action "$ip 公钥分发 失败" /bin/false
fi
done
2.2 执行脚本¶
[root@harbor01 ~]# bash /scripts/fenfakey.sh
目前环境可以联网 [ OK ]
sshpass 已经安装. [ OK ]
正在创建密钥对...
密钥创建成功 [ OK ]
192.168.1.37 公钥分发 成功 [ OK ]
192.168.1.66 公钥分发 成功 [ OK ]