强制ssh使用高强度密钥交换需显式配置kexalgorithms并排除弱算法,推荐curve25519-sha256等现代算法组合,禁用所有sha1相关kex,再同步加固ciphers、macs和hostkeyalgorithms。

要强制 SSH 使用高强度密钥交换,关键不是“启用某个强算法”,而是**显式声明一套现代、安全、且服务端与客户端都能支持的 KexAlgorithms 组合,并确保旧弱算法被彻底排除**。OpenSSH 不会自动忽略不安全选项——若未显式配置,它仍可能协商到 diffie-hellman-group14-sha1 甚至更糟的 group1-sha1。
确认当前实际生效的 KEX 列表
别只看配置文件,运行中的 sshd 才是真实依据:
- 在服务器上执行:sshd -T | grep kexalgorithms —— 输出即为当前生效的完整列表
- 若结果中含 diffie-hellman-group1-sha1 或 diffie-hellman-group14-sha1,说明弱算法仍在使用
- 连接时加 -vvv(如
ssh -vvv user@host),在日志中搜索debug1: kex: algorithm:行,可验证本次实际协商所用算法
配置推荐的强 KexAlgorithms 组合
编辑 /etc/ssh/sshd_config,添加或替换这一行(OpenSSH 7.3+):
KexAlgorithms curve25519-sha256,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256
- curve25519-sha256 是首选:速度快、抗侧信道、实现简洁,但需客户端支持(OpenSSH 6.5+,PuTTY 0.70+)
- ecdh-sha2-nistp256 和 diffie-hellman-group-exchange-sha256 作为必要 fallback:前者兼容性极广,后者允许服务端动态提供强 DH 参数(如 3072-bit 或更高)
- 必须排除所有带 sha1 后缀的算法(如 group14-sha1),NIST 和 CISA 已明确标记其不安全
- 避免仅留 curve25519-sha256 单一算法,否则老旧客户端(如旧版 SecureCRT、JSch 等)将直接报 No compatible key exchange method
生效配置并验证
- 修改后先运行 sudo sshd -t 检查语法是否正确
- 执行 sudo systemctl reload sshd(不是 restart)——避免中断已有连接
- 再次运行 sshd -T | grep kexalgorithms,确认输出与配置完全一致,且无任何 sha1 算法
- 用不同客户端(如新版 OpenSSH、PuTTY 0.77、SecureCRT 9.4)分别连接测试,观察 -vvv 日志中协商出的具体算法
配套加固建议(提升整体链路强度)
仅改 KexAlgorithms 不够,还需同步收紧其他环节:
- Protocol 2:显式禁用 SSHv1(低版本系统仍需此行)
-
Ciphers:启用
aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,禁用所有*-cbc和3des-cbc -
MACs:仅保留
hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,禁用非-etm 及 sha1/md5 类型 -
HostKeyAlgorithms:优先用
ssh-ed25519,ecdsa-sha2-nistp256,排除已淘汰的ssh-rsa(SHA-1)和ssh-dss











