OpenSSH禁用弱算法需顶格明文配置Ciphers和MACs白名单,剔除含cbc、md5、无etm后缀sha1等项;须用sshd -T和ssh -vvv验证实际协商结果,且必须通过sshd -t语法检查与systemctl reload生效。

直接在 /etc/ssh/sshd_config 里顶格写死 Ciphers 和 MACs 列表,删掉所有含 cbc、md5 的算法——OpenSSH 不会“禁用”弱项,只认你明文列出的那些。
怎么确认当前服务器真在用 CBC 或 MD5 算法
别猜,先看实际协商行为:
- 运行
sshd -T | grep -E "(ciphers|macs)",输出里的aes128-cbc、3des-cbc、hmac-md5就是正在启用的脆弱项 - 从客户端连一次:
ssh -vvv user@host,在 debug 日志里搜cipher:和mac:,看到的才是真实握手结果 - 用
ssh -Q cipher和ssh -Q mac查本机支持的全部算法,再人工过滤:凡带cbc、arcfour、3des、md5、sha1(且无etm@openssh.com后缀)的,一律剔除
sshd_config 中 Ciphers 和 MACs 的正确写法
必须顶格、无空格、逗号后不加空格、整行不能换行。旧配置行(哪怕被注释了)也得删干净,否则可能被意外继承:
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctrMACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com- 严禁出现
aes128-cbc、hmac-md5、hmac-sha1—— 后者没有etm@openssh.com后缀即视为不安全
改完不验证等于没改,常见翻车点
语法错、重载错、兼容性错,三者任一出问题都会导致 SSH 登录失败:
- 改完先跑
sudo sshd -t:无输出才表示语法合法;报错必须修正,不能跳过 - 用
sudo systemctl reload sshd(不是restart),避免断开当前会话 - 重载后立刻执行
sshd -T | grep -E "(ciphers|macs)",确认输出和你写的完全一致 - 老客户端(如 PuTTY 0.67、某些嵌入式设备 SSH 实现)可能不支持
gcm或chacha20,若灰度测试时连接失败,可临时补回aes128-ctr保底
真正危险的不是“不知道要禁什么”,而是以为删掉几行配置就万事大吉——OpenSSH 的算法协商机制是白名单制,漏写一个强算法,客户端就可能 fallback 到你刚删掉的 aes128-cbc 上。所以每台服务器都得按自己 ssh -Q 的实际输出来定制列表,不能直接复制粘贴网上配置。


















