SSH 认证原理与配置
SSH(Secure Shell)提供两种主要认证方式:密码认证和密钥认证。
一、密码认证流程
1. 连接初始化
客户端 → 服务器 22 端口:发送连接请求(含 SSH 协议版本)
服务器 → 客户端:发送服务器公钥及支持的加密算法、认证方式
2. 协商加密算法
双方根据支持的算法列表,协商加密算法用于后续数据加密
3. 用户身份验证
客户端提示用户输入用户名和密码
客户端将用户名和加密后的密码发送给服务器
4. 服务器验证
服务器在本地用户数据库中查找用户记录
比对加密后的密码是否匹配
5. 认证结果反馈
匹配 → 建立安全会话
不匹配 → 提示重新输入或限制登录次数
二、密钥认证流程
1. 生成密钥对
客户端使用 ssh-keygen 生成一对密钥:公钥(可公开)和私钥(安全保存,不能泄露)。
2. 上传公钥
将公钥上传到服务器,保存在 ~/.ssh/authorized_keys 文件中。
3. 连接认证流程
客户端发起连接请求 → 服务器接受连接
→ 服务器发送公钥给客户端
→ 客户端验证服务器公钥合法性
→ 客户端生成随机数,使用私钥签名,发送签名+随机数
→ 服务器使用客户端公钥验证签名
→ 验证成功 → 建立安全会话
三、两种方式对比
| 特性 | 密码认证 | 密钥认证 |
|---|---|---|
| 安全性 | 依赖密码强度,易被暴力破解 | 非对称加密,更安全 |
| 便利性 | 每次输入密码 | 免密登录 |
| 适合场景 | 临时访问 | 生产环境、自动化脚本 |
四、生产建议
- 生产环境禁用密码认证,仅使用密钥认证
- 修改
/etc/ssh/sshd_config:PasswordAuthentication no - 使用
ssh-keygen -t ed25519生成更安全的密钥对 - 定期轮换密钥
关联文档
- ../../network/tools/firewalld 与 iptables 对比 — SSH 端口放行
- ../../network/网络 — 网络安全基础
- Linux — Linux 系统管理主页