最有效方式是直接在sshd_config中设置protocol 2:先用sudo grep -i "^protocol" /etc/ssh/sshd_config检查当前配置,若非明确为protocol 2则需编辑该文件新增或修正此行,运行sudo sshd -t验证语法,再sudo systemctl reload sshd生效,并用ssh -vvv测试确认协议协商为v2。

直接在服务端配置文件中明确限定只用 SSH 协议 v2,是最有效、最通用的强制方式。现代 OpenSSH(8.0+)已默认禁用 SSHv1,但为兼顾旧系统或审计要求,仍需显式配置并验证。
确认当前协议支持状态
先检查服务器是否还在允许 SSHv1:
- 运行 sudo grep -i "^Protocol" /etc/ssh/sshd_config,若输出为
Protocol 2,1或Protocol 1,说明未强制 v2 - 若无输出,表示该行被注释或未设置——OpenSSH 默认行为是只启用 v2,但不可依赖,默认≠显式安全
- 也可用 ssh -vvv user@localhost 2>&1 | grep "SSH-" 观察连接时实际协商的协议版本
修改 sshd_config 强制仅用 v2
编辑主配置文件:
- 执行 sudo nano /etc/ssh/sshd_config
- 找到或新增一行:Protocol 2(注意:不加空格、不写逗号、不带引号)
- 删除或注释掉类似
#Protocol 2,1或Protocol 1的旧配置 - 保存后务必运行 sudo sshd -t 检查语法是否正确
重启服务并验证生效
配置无误后重载服务:
- 执行 sudo systemctl reload sshd(推荐,平滑重载)或 sudo systemctl restart sshd
- 重新连接测试:ssh -o "Protocol=1" user@host 应立即失败并提示 “Protocol mismatch”
- 再用 ssh -vvv user@host 2>&1 | grep "kex:" 确认日志中不再出现 v1 相关协商信息
配套加固建议(非必需但强烈推荐)
单设 Protocol 2 是基础,搭配以下配置可真正关闭降级风险:
- 禁用弱密钥类型:在
sshd_config中添加 HostKeyAlgorithms ssh-ed25519,ecdsa-sha2-nistp256,排除ssh-rsa - 限制密钥交换算法:添加 KexAlgorithms ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256
- 避免客户端绕过:在
/etc/ssh/ssh_config或用户级~/.ssh/config中也写入 Protocol 2











