为什么要收窄算法集
SSH 握手时会从服务端与客户端各自支持的算法集合中协商出一套:密钥交换(Kex)、对称加密(Ciphers)、消息认证(MACs)。旧算法如 diff3-hellman-group1-sha1、arcfour、hmac-md5 已被证明不安全或强度不足,安全基线要求只保留现代算法。改写算法列表会直接改变握手行为,因此校验与回退方案必须一并准备。
基本信息
| 配置项 | KexAlgorithms、Ciphers、MACs、HostKeyAlgorithms |
|---|---|
| 配置文件 | /etc/ssh/sshd_config |
| 查看生效值 | sshd -T | grep -E 'kexalgorithms|ciphers|macs' |
| 校验与生效 | sshd -t && systemctl reload sshd |
| 兼容面 | 老客户端、巡检软件、网管平台、部分硬件设备的 SSH 实现 |
| 权限要求 | root |
典型使用场景
- 等保与安全基线核查要求禁用弱加密算法
- 漏洞扫描报告指出 SSH 支持弱算法需要整改
- 迁移到信创环境后统一客户端与服务端的算法集
- 排查扫描器报『支持 CBC 模式密码套件』之类问题
- 新建服务器时直接按基线模板下发算法配置
配置与验证
配置与验证
# /etc/ssh/sshd_config
# KexAlgorithms curve25519-sha256,ecdh-sha2-nistp256
# Ciphers aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes128-gcm@openssh.com
# MACs hmac-sha2-512,hmac-sha2-256
sshd -T | grep -iE 'kexalgorithms|ciphers|^macs' # 查看合并后的最终生效算法集
sshd -t && systemctl reload sshd # 先语法校验再重载,避免起不来
ssh -Q cipher | head # 查看本地客户端支持哪些算法,便于比对客户端侧验证与回退
客户端侧验证与回退
ssh -o KexAlgorithms=curve25519-sha256 -o Ciphers=aes256-gcm@openssh.com user@host # 用指定算法实测连接
ssh -vv user@host 2>&1 | grep -i 'kex\|cipher\|mac' | head # 观察实际协商结果
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%F) # 改前备份,便于快速回退
ssh-keygen -l -f /etc/ssh/ssh_host_ed25519_key.pub # 确认主机密钥类型满足要求
systemctl status sshd --no-pager | tail -5 # 重载后确认服务无异常配置项与取值要点
| 配置项 | 控制内容 | 取值要点 |
|---|---|---|
| KexAlgorithms | 密钥交换算法 | 保留 curve25519 与 ecdh-sha2 系列 |
| Ciphers | 对称加密算法 | 优先 AEAD 类:gcm、chacha20-poly1305 |
| MACs | 消息认证算法 | 保留 sha2 系列,去掉 md5 与 sha1 系 |
| HostKeyAlgorithms | 主机密钥类型 | 与生成的主机密钥类型保持一致 |
| 算法列表写法 | 逗号分隔,无多余空格 | 拼写错误会导致 sshd 启动失败 |
老客户端可能不支持新算法,先看 sshd -T 的现状再灰度切换,并保留回退配置:切换后立刻用目标客户端实测连接,别等业务操作时才发现连不上。
算法收窄前先把当前生效值记录下来:整改前后的对比既能作为合规证据,也能在出现连接问题时快速定位是哪一项变更导致的。