第五篇:密钥认证

密钥认证

  • 名字:密钥认证、免密码登录、双机互信
  • 密钥认证是单向:客户端使用私钥证明身份,服务端通过公钥进行验证,服务端不需要使用私钥来返回认证信息
  • 密钥认证用于无密码登录安全的身份验证
  • 应用场景:
    • 服务要求使用密钥认证
    • 手动书写批量管理脚本

  SSH密钥认证流程⭐⭐⭐

  • 质询:随机生成的字符串
  • 密钥对:
    • 公钥:public key(一般以.pub结尾)
    • 私钥:private keey

  上手指南

角色 主机名 ip
管理节点 m01 172.16.1.61
被管理节点 nfs01 172.16.1.31
被管理节点 web01 172.16.1.41
被管理节点 backup 172.16.1.7

 基本检查

# ping
    ping 172.16.1.xxx
# 22端口(sshd服务是否开启)
    nmap -p22 172.16.1.31 172.16.1.41 172.16.1.7

 创建密钥对⭐⭐

# ssh-keygen -t rsa
    创建的时候可以不加-t
    通过rsa方法对数据进行加密

 分发公钥及连接测试⭐⭐

复制代码
# 分发公钥
    ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.1.41
# 连接测试
    ssh root@172.16.1.41 hostname -I

# 温馨提示
    # ssh-copy-id后公钥会被存放在对方服务端root用户.ssh下面
        /root/.ssh/known_hosts
    # 第一次远程连接时会有yes/no的安全认证
        ssh root@172.16.1.41
        ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.1.41
复制代码

  自动化创建和分发密钥⭐⭐⭐⭐⭐

  • 阻碍:
    • 创建密钥对时
    • 分发公钥时:第一次远程连接时yes/no安全验证(yes后会将信息保存到.ssh/known_hosts)
    • 分发公钥时:输入密码

 自动化创建密钥

ssh-keygen -t rsa -f /root/.ssh/id_rsa -P ''
[root@m01 ~]# ssh-keygen -t rsa -f /root/.ssh/id_rsa -P ''
    -f  用于指定私钥的位置
    -P(大写)  指定密码短语(设置为空)

 自动化分发公钥

sshpass -p 'root' ssh-copy-id -i /root/.ssh/id_rsa.pub -o StrictHostKeyChecking=no root@172.16.1.7

  • 阻碍:第一次远程连接时yes/no安全验证
# 温馨提示:第一次远程连接时yes/no安全验证,
  输入yes后客户端会将远程主机的公钥信息存储在 ~/.ssh/known_hosts 文件中

# 解决思路:临时取消,连接的时候不检查主机信息
    -o StrictHostKeyChecking=no 临时不检查主机信息
    ssh-copy-id -i ~/.ssh/id_rsa.pub -o StrictHostKeyChecking=no root@172.16.1.41
  •  阻碍:密码
# 安装ssh密码助手
    yum install -y sshpass

# 先检查是否需要yes/no安全验证
    如果需要yes/no安全验证而没有验证,直接使用sshpass则执行失败
# sshpass -p 指定密码(sshpass适用于ssh、scp、ssh-copy-id等交互式命令)
    # sshpass -p 'your_password' ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.1.41
    # sshpass -p 'your_password' ssh root@172.16.1.41

 自动化创建和分发SSH密钥脚本 

复制代码
#!/bin/bash
#author: yuanxiaojiang
#version: v1
#desc: 自动创建和分发SSH密钥


#1 变量
password="root"    # SSH密码  
ips="172.16.1.7 172.16.1.31 172.16.1.41"    # 远程主机IP列表  

#2.1 检查是否联网  
if ! ping -c 1 8.8.8.8 &>/dev/null; then
    echo "网络不可用,请检查网络连接。"  
    exit 1
fi

#2.2 检查sshpass是否安装  
if ! command -v sshpass &>/dev/null; then
    echo "sshpass未安装,正在安装..."  
    yum install -y sshpass  # 如果使用的是Debian/Ubuntu,请替换为apt-get  
fi

#3 创建SSH密钥对  
if [ -f ~/.ssh/id_rsa ]; then
    echo "已经创建过密钥对。"  
else
    echo "正在创建密钥对..."  
    ssh-keygen -t rsa -f ~/.ssh/id_rsa -P "" &>/dev/null
    if [ $? -eq 0 ]; then
        echo "密钥创建成功。"  
    else
        echo "密钥创建失败。"  
        exit 1
    fi
fi

# 通过循环发送公钥  
for ip in $ips; do
    echo "正在将公钥分发到 $ip..."  
    sshpass -p "$password" ssh-copy-id -i ~/.ssh/id_rsa.pub -o StrictHostKeyChecking=no "$ip" &>/dev/null
    if [ $? -eq 0 ]; then
        echo "$ip 公钥分发成功。"  
    else
        echo "$ip 公钥分发失败。"  
    fi
done

echo "公钥分发完成"
/server/scripts/create_distribute_keys.sh
复制代码

 

posted @   猿小姜  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示