生产环境配置openssh仅支持ed25519需同步完成五步:生成ed25519主机密钥并指定hostkey;设置pubkeyacceptedalgorithms和hostkeyalgorithms为ssh-ed25519;kexalgorithms限定为curve25519-sha256;禁用protocol 1、passwordauthentication及降级选项;最后通过sshd -t、sshd -t和本地测试验证全链路生效。

生产环境配置 OpenSSH 仅支持 Ed25519 高强度加密算法,核心是“服务端只认 ed25519 主机密钥 + 客户端只用 ed25519 密钥对”,同时禁用所有弱协议和降级路径。这不是简单加一行配置就能生效,必须同步调整主机密钥、KEX、签名算法、服务端策略与客户端部署逻辑。
生成并部署 ed25519 主机密钥
OpenSSH 服务端需用 ed25519 类型的主机密钥进行身份声明,这是强认证的前提:
- 删除旧主机密钥:sudo rm /etc/ssh/ssh_host_*_key*
- 生成新密钥:sudo ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ""(-N "" 表示无密码,因主机密钥由系统管理,无需交互)
- 确认权限:私钥必须为 -rw------- root:root,否则 sshd 启动失败
- 在 /etc/ssh/sshd_config 中显式指定:
HostKey /etc/ssh/ssh_host_ed25519_key
注释或删除所有其他 HostKey 行(如 rsa、ecdsa、dsa)
强制使用 ed25519 签名与密钥交换
仅用 ed25519 主机密钥还不够,必须限制签名算法和密钥交换过程也只走 ed25519 路径:
- 设置签名算法(客户端认证依赖此):
PubkeyAcceptedAlgorithms ssh-ed25519 - 设置主机密钥算法(服务端向客户端声明自身身份所用):
HostKeyAlgorithms ssh-ed25519 - 设置密钥交换算法(保障会话密钥安全生成):
KexAlgorithms curve25519-sha256
这是唯一与 ed25519 公钥体系深度协同的 KEX,速度快、抗侧信道、参数固定无弱配置风险 - 禁用所有降级选项:确保配置中未出现 +ssh-rsa、+ssh-dss 或任何含 sha1 的算法名
关闭兼容性回退与弱协议
生产环境不允许“为了连上老设备”而牺牲整体安全基线:
- 协议版本锁定:Protocol 2(必须,且不能写成
Protocol 1,2) - 禁用密码登录:PasswordAuthentication no(ed25519 认证应为唯一入口)
- 禁用空密码与键盘交互:PermitEmptyPasswords no、KbdInteractiveAuthentication no
- 不启用 AllowUsers/AllowGroups 的宽泛白名单,改用 Match User 按需精细控制(如仅允许特定用户使用特定密钥)
验证与上线前必做检查
配置错误会导致 SSH 服务不可用,务必逐项验证:
- 语法检查:sudo sshd -t(无输出即通过)
- 查看当前生效策略:sudo sshd -T | grep -E "(hostkey|pubkey|kex)",确认输出中只含
ssh-ed25519和curve25519-sha256 - 本地测试连接:ssh -o HostKeyAlgorithms=ssh-ed25519 -o PubkeyAcceptedAlgorithms=ssh-ed25519 user@localhost
- 检查服务端日志:sudo journalctl -u sshd -n 20 --no-pager,确认无
no matching key exchange method或no mutual signature algorithm报错 - 避免 reload 导致断连:首次上线建议用 sudo systemctl restart sshd 并保持本地 console 登录备用;后续维护可用 reload
这套配置彻底剥离 RSA、DSA、ECDSA 及所有 SHA-1 依赖,将攻击面压缩到现代椭圆曲线密码学最精简、最高效、最抗量子演进的一条路径。只要客户端 OpenSSH ≥ 6.5(2014年起),就完全兼容;若存在极老旧终端,应升级终端而非降级服务端。










