必须显式配置现代KexAlgorithms(如curve25519-sha256、ecdh-sha2-nistp256、diffie-hellman-group-exchange-sha256)并彻底排除所有含sha1或group1的弱算法,再通过sshd -t检查、systemctl reload重载、sshd -T验证生效,否则将回退至不安全默认值或协商失败。

配置 SSH 的 KexAlgorithms 列表,核心是**主动剔除已知存在安全缺陷或被弃用的密钥交换算法**,而非简单罗列“看起来新”的算法。后门风险往往不来自显式恶意代码,而源于弱算法被中间人降级利用、计算资源耗尽攻击(如 CVE-2002-20001),或协议实现中可被绕过的协商逻辑。
先确认当前实际启用的算法
别凭经验改配置。运行以下命令查看服务端真实暴露的密钥交换选项:
-
nmap --script=ssh2-enum-algos -p22 your-server-ip(无需 root,远程探测) -
ssh -Q kex(在服务器本地执行,看 OpenSSH 实际支持哪些) -
grep -i "^KexAlgorithms" /etc/ssh/sshd_config(检查是否已有显式配置)
若无输出或显示包含 diffie-hellman-group1-sha1、diffie-hellman-group14-sha1、diffie-hellman-group16-sha1 等带 sha1 后缀的 DH 组,就属于必须过滤的高风险项——NIST 已明确淘汰,Logjam 和类似降级攻击可直接利用。
只保留现代、带前向保密且经广泛验证的算法
推荐按优先级顺序写入 /etc/ssh/sshd_config,顶格、无空格、逗号分隔:
-
curve25519-sha256,curve25519-sha256@libssh.org(首选:速度快、抗侧信道、开源社区强审) -
ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521(次选:金融/政企常用,需确认 NIST 曲线信任策略) -
sntrup761x25519-sha512@openssh.com(Post-Quantum 候选,OpenSSH 9.0+ 支持,增强长期安全性)
明确排除:diffie-hellman-group-exchange-sha1、diffie-hellman-group1*、diffie-hellman-group14-sha1、gss-gex-sha1- 等所有含 sha1 或 group1 的条目。即使某些旧设备依赖它们,也应推动客户端升级,而非妥协服务端安全。
配合关键加固动作,堵死协商漏洞
仅改 KexAlgorithms 不够。弱算法常通过其他路径被激活:
-
强制协议版本:确保配置中有
Protocol 2,删除或注释所有Protocol 1行 -
禁用老旧主机密钥:移除
HostKey /etc/ssh/ssh_host_rsa_key类行,改用ssh_host_ed25519_key或ssh_host_ecdsa_key -
关闭密码登录:设
PasswordAuthentication no,避免认证阶段被拖回弱协商上下文 -
验证再重载:改完执行
sudo sshd -t检查语法;成功后用sudo systemctl reload sshd(非 restart,防断连)
验证是否生效且无残留风险
修改后务必复测:
- 用原命令
nmap --script=ssh2-enum-algos再扫一次,确认输出中仅剩你允许的算法 - 从一台老客户端(如旧版 PuTTY 或 CentOS 7 自带 OpenSSH)尝试连接,观察是否拒绝弱协商(应报
no matching key exchange method found) - 检查扫描工具(如 Nessus、OpenVAS)最新报告,确认 “Weak Key Exchange Algorithms” 警告已消失
安全不是列表越长越好,而是每一条都经得起推敲。过滤掉一个 group14-sha1,可能就拦下一次静默降级——这比事后排查后门要实在得多。

















