《远程访问安全加固策略》
第2章 SSH协议基础

2、SSH协议基础:SSH工作原理、认证机制、加密算法选择

SSH(Secure Shell)是远程访问的“黄金标准”,它通过加密隧道保障数据传输的机密性与完整性。理解其底层工作原理、认证机制与加密算法选择,是构建安全远程访问体系的基石。

2.1 SSH工作原理

SSH采用客户端-服务器(C/S)架构,连接建立分为三个阶段:传输层握手、用户认证、连接协议。下图展示了核心交互流程:

SSH 客户端 ssh user@host SSH 服务器 sshd 守护进程 ① TCP 三次握手 (端口22) ② 密钥交换 (Diffie-Hellman) ③ 用户认证 (密码/密钥) ④ 加密会话通道建立 🔒

图2-1:SSH连接建立四阶段流程示意图

详细步骤说明:

阶段协议层核心操作安全目标
① TCP连接传输层客户端发起TCP连接到服务器22端口建立可靠传输
② 密钥交换传输层协商加密算法、交换DH参数、生成会话密钥前向安全性
③ 用户认证用户认证层验证用户身份(密码、公钥、键盘交互等)身份真实性
④ 加密会话连接层多路复用通道,执行远程命令或文件传输数据机密性

2.2 认证机制

SSH支持多种认证方式,按安全等级从低到高排列如下:

🔑 密码认证 传统方式 易受暴力破解 不推荐生产环境 安全等级:★☆☆☆☆ 🔐 公钥认证 非对称加密 推荐标准方式 支持证书授权 安全等级:★★★★☆ 🛡️ 双因素认证 密码/密钥 + OTP 硬件Token/U2F 最高安全级别 安全等级:★★★★★

图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协议支持多种加密算法,合理选择是安全加固的关键。以下为推荐配置清单:

🔒 对称加密 数据加密传输 ✅ chacha20-poly1305 ✅ aes256-gcm ✅ aes128-gcm ❌ aes256-cbc ❌ 3des-cbc 推荐:chacha20-poly1305 🤝 密钥交换 前向安全性保障 ✅ curve25519-sha256 ✅ diffie-hellman-group16 ✅ ecdh-sha2-nistp256 ❌ diffie-hellman-group1 ❌ diffie-hellman-group14 推荐:curve25519-sha256 🖥️ 主机密钥 服务器身份验证 ✅ ssh-ed25519 ✅ rsa-sha2-512 ✅ ecdsa-sha2-nistp256 ❌ ssh-rsa (SHA-1) ❌ ssh-dss 推荐:ed25519

图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 命令检查当前支持的算法列表,及时移除不安全算法。