ssh是安全通信框架,其安全性取决于协商的三类算法:密钥交换(如curve25519-sha256)、主机密钥(如ssh-ed25519)、加密与完整性算法(如chacha20-poly1305@openssh.com),旧算法如diffie-hellman-group1-sha1和ssh-rsa已不安全。

SSH本身不是一种加密协议,而是一套安全通信框架,真正起作用的是它内部协商选用的加密算法组合。选对算法,才能让连接既安全又稳定;选错或配置不当,可能留下可利用的弱点。
核心加密组件分三类
SSH握手过程中会分别协商三组算法,每类都影响整体安全性:
-
密钥交换算法(KEX):决定双方如何安全生成共享会话密钥。优先选
curve25519-sha256或ecdh-sha2-nistp256,避免使用已弃用的diffie-hellman-group1-sha1(易被破解)。 -
主机密钥算法:用于服务端身份认证。推荐
ssh-ed25519(速度快、抗侧信道攻击),次选rsa-sha2-512。不建议继续使用纯ssh-rsa(SHA-1签名已被视为不安全)。 -
加密与完整性算法:保护传输数据。首选
chacha20-poly1305@openssh.com(尤其在移动或低功耗设备上)或aes256-gcm@openssh.com;禁用arcfour、3des-cbc等弱算法。
OpenSSH 版本决定可用选项
旧版本(如 OpenSSH 7.0 之前)默认支持大量过时算法,新版本(8.0+)已逐步移除或禁用不安全选项。例如:
- OpenSSH 8.2 起默认禁用
ssh-rsa主机密钥(仅接受 SHA-2 签名); - OpenSSH 9.0 移除了对
diffie-hellman-group14-sha1的支持; - 若需兼容老旧设备,应在服务端显式启用特定算法,但必须评估风险并记录原因。
实际验证与配置方法
别只看文档,动手确认当前生效的算法:
- 查看服务端支持列表:
sshd -T | grep -E "(kex|pubkey|cipher|mac)" - 连接时观察协商结果:
ssh -vvv user@host,搜索kex:、host key:、enc:、mac:行; - 在
/etc/ssh/sshd_config中强制指定安全组合,例如:KexAlgorithms curve25519-sha256,diffie-hellman-group16-sha384HostKeyAlgorithms ssh-ed25519,rsa-sha2-512Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.comMACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
兼顾安全与兼容的务实建议
生产环境不能只追求“最安全”,还要考虑客户端能力:
- 面向现代 Linux/macOS/新版 Windows(自带 OpenSSH),可全面启用 Ed25519 和 ChaCha20;
- 若需支持较老嵌入式设备或定制固件,保留一组最小安全集(如
ecdh-sha2-nistp256+rsa-sha2-512+aes128-gcm@openssh.com),但应规划迁移路径; - 定期检查 OpenSSH 发布说明,关注算法弃用公告和 CVE 修复情况。











