标签搜索

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

lilymaxyz
2024-02-23 / 0 评论 / 26 阅读 / 正在检测是否收录...

@TOC

1.集群批量管理--秘钥认证

1.1.概述

  • 管理更加轻松:两个节点,通过密钥形式进行访问,不需要输入密码,单向
  • 服务要求(应用场景):

    • :star::star::star::star::star:==一些服务在使用前要求我们做秘钥认证==
    • 手动写批量管理脚本
  • 名字:密钥认证,免密码登录,双机互信

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.自动化创建与分发秘钥

  • 阻碍:

    • :one:创建秘钥对
    • :two:分发公钥的时候:yes/no (yes后会把信息保存到.ssh/known_hosts)
    • :three:分发公钥的时候:输入密码

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

image-20241101171812175

endl

0

评论

博主关闭了所有页面的评论