第五篇:密钥认证
密钥认证
- 名字:密钥认证、免密码登录、双机互信
- 密钥认证是单向:客户端使用私钥证明身份,服务端通过公钥进行验证,服务端不需要使用私钥来返回认证信息
- 密钥认证用于无密码登录和安全的身份验证
- 应用场景:
- 服务要求使用密钥认证
- 手动书写批量管理脚本
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 "公钥分发完成"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现