《远程访问安全加固策略》
第2章 SSH协议基础
2、SSH协议基础:SSH工作原理、认证机制、加密算法选择
SSH(Secure Shell)是远程访问的“黄金标准”,它通过加密隧道保障数据传输的机密性与完整性。理解其底层工作原理、认证机制与加密算法选择,是构建安全远程访问体系的基石。
2.1 SSH工作原理
SSH采用客户端-服务器(C/S)架构,连接建立分为三个阶段:传输层握手、用户认证、连接协议。下图展示了核心交互流程:
图2-1:SSH连接建立四阶段流程示意图
详细步骤说明:
| 阶段 | 协议层 | 核心操作 | 安全目标 |
|---|---|---|---|
| ① TCP连接 | 传输层 | 客户端发起TCP连接到服务器22端口 | 建立可靠传输 |
| ② 密钥交换 | 传输层 | 协商加密算法、交换DH参数、生成会话密钥 | 前向安全性 |
| ③ 用户认证 | 用户认证层 | 验证用户身份(密码、公钥、键盘交互等) | 身份真实性 |
| ④ 加密会话 | 连接层 | 多路复用通道,执行远程命令或文件传输 | 数据机密性 |
2.2 认证机制
SSH支持多种认证方式,按安全等级从低到高排列如下:
图2-2:SSH三种主要认证机制对比
公钥认证最佳实践:
# 1. 生成强密钥对(推荐 ed25519)
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519
# 2. 复制公钥到服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server
# 3. 服务器端配置(/etc/ssh/sshd_config)
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
AuthenticationMethods publickey
2.3 加密算法选择
SSH协议支持多种加密算法,合理选择是安全加固的关键。以下为推荐配置清单:
图2-3:SSH加密算法分类与推荐选择
服务器端安全配置示例(/etc/ssh/sshd_config):
# 加密算法(仅允许强算法)
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com
# 密钥交换算法
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
# 主机密钥算法
HostKeyAlgorithms ssh-ed25519,rsa-sha2-512,rsa-sha2-256
# MAC算法(消息认证码)
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com
2.4 安全加固检查清单
- 禁用密码认证:设置
PasswordAuthentication no,仅允许公钥认证 - 使用强密钥算法:优先选择 ed25519 或 RSA 4096 位以上
- 限制登录用户:使用
AllowUsers或AllowGroups白名单 - 更改默认端口:将端口22改为非标准端口(如 2222)降低扫描风险
- 启用日志审计:配置
LogLevel VERBOSE记录详细登录信息 - 设置登录超时:
LoginGraceTime 30限制未认证连接时间 - 禁用root登录:
PermitRootLogin prohibit-password或no - 使用Fail2Ban:配合动态防火墙阻止暴力破解
💡 专家提示: 在OpenSSH 8.5及以上版本中,已默认禁用ssh-rsa签名算法(基于SHA-1)。建议定期使用 ssh -Q cipher、ssh -Q kex、ssh -Q key 命令检查当前支持的算法列表,及时移除不安全算法。