秘钥认证与分发脚本(免密码登录)
- 1.集群批量管理--秘钥认证
- 1.1.概述
- 1.2.原理
- 1.3.极速上手指南
- 1.3.0.基本检查
- 1.3.1.创建密钥对
- 1.3.2.分发公钥
- 1.3.3.连接测试
- 1.4.自动化创建与分发秘钥
- 1.4.1.自动化创建秘钥
- 1.4.2.自动化分发公钥
- 1.4.3.自动化创建与分发脚本
- endl
1.集群批量管理–秘钥认证
1.1.概述
- 管理更加轻松:两个节点,通过密钥形式进行访问,不需要输入密码,单向
- 服务要求(应用场景):
- ⭐️⭐️⭐️⭐️⭐️一些服务在使用前要求我们做秘钥认证
- 手动写批量管理脚本
- 名字:密钥认证,免密码登录,双机互信
1.2.原理
1.3.极速上手指南
角色 | 主机名 | ip |
---|
管理机 | m01 | 10.0.0.0.7 |
被管理节点 | nfs01 | 10.0.0.0.17 |
被管理节点 | web01 | 10.0.0.0.27 |
被管理节点 | backup | 10.0.0.0.37 |
hostnamectl set-hostname backup
1.3.0.基本检查
ping 172.16.1.xxx
nmap -p22 172.16.1.31 172.16.1.7
1.3.1.创建密钥对
ssh-keygen -t rsa
通过rsa方法对数据进行加密.
1.3.2.分发公钥
ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.0.0.17
1.3.3.连接测试
ssh 10.0.0.17 w
ssh 10.0.0.17 hostname -I
温馨提示:
ssh-copy-id后公钥被存放在对方服务器的用户家目录下面的.ssh下面.
名字叫:authorized_keys
1.4.自动化创建与分发秘钥
- 阻碍:
- 1️⃣创建秘钥对
- 2️⃣分发公钥的时候:yes/no (yes后会把信息保存到.ssh/known_hosts)
- 3️⃣分发公钥的时候:输入密码
1.4.1.自动化创建秘钥
ssh-keygen -f ~/.ssh/id_rsa -P ''
ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''
-f用于指定私钥的位置
-P 密码短语 设置为空
1.4.2.自动化分发公钥
yum install -y sshpass
ssh 10.0.0.7 hostname -I
sshpass -p123456 ssh 10.0.0.17 hostname -I
10.0.0.7 172.16.1.7
ssh-copy-id -i ~/.ssh/id_rsa.pub 10.0.0.17
sshpass -p123456 ssh-copy-id -i ~/.ssh/id_rsa.pub 10.0.0.17
温馨提示: sshpass与ssh-copy-id的时候如果第1次连接,提示yes/no,sshpass失效了.
补充说明:
sshpass适用于给ssh相关的命令提供密码:ssh,scp,ssh-copy-id.
温馨提示: 第1次远程的提示 yes/no,主机密钥信息检查,输入yes后存放到~/.ssh/known_hosts
解决思路: 临时取消即可,连接的时候不检查主机信息.
-o StrictHostKeyChecking=no 临时不检查主机信息.
sshpass -p123456 ssh-copy-id -i ~/.ssh/id_rsa.pub -o StrictHostKeyChecking=no 10.0.0.17
1.4.3.自动化创建与分发脚本
ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''
sshpass -p123456 ssh-copy-id -i ~/.ssh/id_rsa.pub -o StrictHostKeyChecking=no 10.0.0.17
vim fenfamiyao.sh
#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
color_function(){
color () {
RES_COL=60
MOVE_TO_COLOR="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 -en "\E[1;35m$1\E[0m" && $MOVE_TO_COLOR
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
}
[ $# -eq 0 ] && echo "Usage: `basename $0` {success|failure|warning}"
color $1 $2
}
. /etc/os-release
pass=123456
ips="10.0.0.17
10.0.0.27
10.0.0.37"
if [[ ${ID} =~ ^(rocky|rhel|centos) ]];then
rpm -q sshpass &>/dev/null || yum -y install sshpass &>/dev/null
elif [[ ${ID} =~ ^(ubuntu) ]];then
dpkg -V sshpass &>/dev/null || apt -y install sshpass &>/dev/null
else
color_function "比支持此系统:${ID}" 2
exit
fi
if [ -f ~/.ssh/id_rsa ];then
echo "已经创建过密钥对"
else
echo "正在创建密钥对"
ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' &>/dev/null
if [ $? -eq 0 ];then
color_function "创建密钥对成功" 0
else
color_function "创建密钥对失败" 1
exit
fi
fi
for ip in $ips
do
sshpass -p${pass} ssh-copy-id -i ~/.ssh/id_rsa.pub -o StrictHostKeyChecking=no ${ip} &>/dev/null
if [ $? -eq 0 ];then
color_function "${ip}:秘钥已发送..." 0
else
color_function "${ip}:秘钥发送失败..." 1
fi
done
for ip in $ips
do
hostname=`ssh ${ip} hostname`
if [ $? -eq 0 ];then
color_function "${ip}:${hostname}检测成功..." 0
else
color_function "${ip}:${hostname}检测失败..." 1
fi
done
endl