当前位置: 首页 > article >正文

秘钥认证与分发脚本(免密码登录)

秘钥认证与分发脚本(免密码登录)

  • 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
管理机m0110.0.0.0.7
被管理节点nfs0110.0.0.0.17
被管理节点web0110.0.0.0.27
被管理节点backup10.0.0.0.37
hostnamectl set-hostname backup

1.3.0.基本检查

#ping
ping 172.16.1.xxx
#22端口 sshd服务开启或可以访问
nmap -p22 172.16.1.31 172.16.1.7

1.3.1.创建密钥对

ssh-keygen -t rsa
#注意创建的啥时候也可以不加-t
通过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
#sshpass命令基本使用
# -p指定密码
# 先:
ssh 10.0.0.7 hostname -I 
# 检查是否需要输入yes/no
# 然后使用:
sshpass -p123456 ssh 10.0.0.17 hostname -I
10.0.0.7 172.16.1.7

#使用sshpass 与ssh-copy-id分发公钥
# 先:
ssh-copy-id -i ~/.ssh/id_rsa.pub 10.0.0.17
# 检查是否需要输入yes/no
# 然后使用:
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
温馨提示: 第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
# 一键创建秘钥对  分发秘钥对
#1.vars
pass=123456
ips="10.0.0.17
10.0.0.27
10.0.0.37"

# 加入判断sshpass命令是否存在,如果不存在则安装
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

#2.创建密钥对
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

#3.通过循环发送公钥
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

#4.批量在所有机器上执行命令  检查
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


http://www.kler.cn/a/375969.html

相关文章:

  • YOLO——yolo v4(2)
  • MySQL数据类型中char与varchar、blob与text的区别
  • python爬虫获取数据后的数据提取
  • 详解python中如何使用时间戳,日期,时间,时区
  • Linux高阶——1027—守护进程
  • PostgreSQL-06-入门篇-集合运算
  • Node.js——fs模块-同步与异步
  • 从语法到AI率:用ChatGPT润色论文的3个误区
  • Linux之实战命令63:ip应用实例(九十七)
  • LeetCode - 3259. 超级饮料的最大强化能量
  • 小林渗透入门:burpsuite+proxifier抓取小程序流量
  • Linux补基础之:系统和进程
  • 最新整理:Selenium自动化测试面试题
  • 24/11/2 算法笔记 拆解LDA
  • css, 文字超出用省略号,包含单行文本省略号,多行文本省略号
  • 深度学习之学习率
  • VSCode进阶之路
  • 如何使用python完成数据统计分析及预测?
  • HTML5加密技术详解
  • docker部署nginx+nacos+redis+java镜像和容器
  • 软考(中级-软件设计师)计算机网络篇(1101)
  • Vue3中Element Plus==el-eialog弹框中的input无法获取表单焦点
  • GAN在AIGC中的应用
  • Java版企电子招标采购系统源业码Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis
  • 【MATLAB代码】基于IMM(Interacting Multiple Model)算法的目标跟踪,所用模型:CV、CA、CT
  • Python 基础知识(基础操作内容)