SSH原理与实战:密钥认证实现服务器免密登录
文章目录
- 为啥需要免密登录呢
- 一、SSH工作原理简述
- 1. 加密三剑客
- 2. 连接建立流程
- 二、关键文件解析
- 三、两台服务器免密登录实战
- 环境准备
- 步骤1:生成密钥对(服务器A)
- 步骤2:部署公钥到服务器B
- 步骤3:配置快捷连接(服务器A)
- 步骤4:测试免密登录
- 四、安全增强措施
- 1. 密钥防护
- 2. 服务器加固
- 五、常见问题排查
- 症状:仍要求输入密码
- 症状:Host key verification failed
为啥需要免密登录呢
免密登录主要是为了方便和提高效率。想象一下你每天都要去一个地方,比如你每天都要进入自己的房间。如果每次进门都需要找钥匙、开锁,会比较麻烦。但如果你有一种方法,比如人脸识别或者指纹识别,门就能自动打开,你就可以直接进去了,这样会节省很多时间和精力。
一、SSH工作原理简述
1. 加密三剑客
- 对称加密:AES算法加密通信内容(速度快)
- 非对称加密:RSA/ECDSA算法验证身份(安全性高)
- 哈希校验:SHA算法确保数据完整性(防篡改)
2. 连接建立流程
- TCP三次握手建立连接
- 交换协议版本和加密算法
- 服务器发送公钥给客户端
- 生成临时会话密钥
- 客户端发起认证请求
- 建立加密通信隧道
二、关键文件解析
文件路径 | 作用说明 | 推荐权限 |
---|---|---|
~/.ssh/known_hosts | 存储已验证过的主机公钥指纹 | 644 |
~/.ssh/authorized_keys | 存储允许登录的公钥列表 | 600 |
~/.ssh/config | 客户端连接配置模板 | 600 |
~/.ssh/id_ed25519 | 用户的ED25519私钥(绝不可泄露) | 600 |
~/.ssh/id_ed25519.pub | 用户的ED25519公钥(需要分发) | 644 |
三、两台服务器免密登录实战
环境准备
- 服务器A:跳板机(IP:192.168.1.100)
- 服务器B:目标机(IP:192.168.1.200)
- 用户账号:oper
步骤1:生成密钥对(服务器A)
# 使用更安全的ED25519算法
ssh-keygen -t ed25519 -a 100 -C "oper@jumpserver" -f ~/.ssh/cluster_key
# 生成结果:
# - cluster_key → 私钥(相当于钥匙)
# - cluster_key.pub → 公钥(相当于锁芯)
步骤2:部署公钥到服务器B
# 方法一:自动部署(需要当前能密码登录)
ssh-copy-id -i ~/.ssh/cluster_key.pub oper@192.168.1.200
# 方法二:手动部署(适合无密码登录环境)
cat ~/.ssh/cluster_key.pub | ssh oper@192.168.1.200 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
步骤3:配置快捷连接(服务器A)
vim ~/.ssh/config
# 添加以下内容
Host db-server
HostName 192.168.1.200
User oper
Port 22
IdentityFile ~/.ssh/cluster_key
StrictHostKeyChecking yes
ServerAliveInterval 30
步骤4:测试免密登录
# 普通方式测试
ssh -i ~/.ssh/cluster_key oper@192.168.1.200
# 使用配置别名测试
ssh db-server
# 预期结果:直接进入服务器B的终端
四、安全增强措施
1. 密钥防护
# 给私钥加密保护
ssh-keygen -p -f ~/.ssh/cluster_key
# 使用ssh-agent管理密钥
eval $(ssh-agent)
ssh-add ~/.ssh/cluster_key
2. 服务器加固
# 修改SSH配置文件(/etc/ssh/sshd_config)
PasswordAuthentication no # 禁用密码登录
PermitRootLogin no # 禁止root登录
MaxAuthTries 3 # 限制尝试次数
ClientAliveInterval 300 # 超时自动断开
五、常见问题排查
症状:仍要求输入密码
# 检查三部曲
1. 服务器B的~/.ssh/authorized_keys权限是否为600
2. 服务器B的~/.ssh目录权限是否为700
3. 服务器A的私钥文件权限是否为600
# SELinux问题处理
restorecon -Rv ~/.ssh
症状:Host key verification failed
# 清除旧指纹
ssh-keygen -R 192.168.1.200
知识延伸:ED25519密钥相比传统RSA2048,在相同安全强度下速度快30%,密钥长度缩短50%。推荐作为首选算法。
通过本文,您已掌握SSH免密登录的核心原理与生产级部署方案。当看到终端秒连服务器的那一刻,就是运维效率质的飞跃!
关注公众号原宏Cloud运维栈,带你学习更多实用技巧