运维安全: SSH 公钥认证算法加固

前言:SSH 是运维日常,但你可能没注意到,陪伴我们是运维日常,但你可能没注意到,陪伴我们多年的 ssh-rsa 算法,早已因 SHA-1 漏洞成为潜在风险------哪怕是内网服务器也不例外。本文从版本兼容到生产实操,带你一步步完成 SSH 算法安全加固,避开配置陷阱,让服务器连接更安全。

一、背景:为什么要禁用 ssh-rsa

  1. 算法历史与安全缺陷
    ssh-rsa 是早期 SSH 协议默认公钥认证算法,基于 RSA 搭配 SHA-1 哈希函数 实现;而 SHA-1 已于2017年被证实存在碰撞攻击漏洞,攻击者可伪造合法签名绕过认证,即便高强度 RSA 密钥,也会因哈希层漏洞失去安全保障。

    现代安全替代方案为 rsa-sha2-256/rsa-sha2-512(RSA 搭配 SHA-2 哈希)和 Ed25519(椭圆曲线算法),其中 Ed25519 以256位密钥实现3072位 RSA 的安全强度,且性能更优。

  2. 内网服务器的安全误区

    内网并非绝对安全,内部恶意人员、被钓鱼入侵的终端,或突破外网的攻击者,均可利用 ssh-rsa 漏洞发起攻击;算法本身的缺陷与网络环境无关,禁用不安全算法是服务器基础防护要求。


二、操作前:核心检查步骤

修改配置前必须完成三项检查,避免因版本不兼容、算法不匹配导致服务器连接中断。

  1. 查看服务器端生效公钥算法

    bash 复制代码
    # 查看sshd服务当前允许的公钥算法
    sshd -T | grep pubkeyacceptedkeytypes
    # 查看服务器端SSH客户端支持的算法
    ssh -Q key
  2. 检查服务器 OpenSSH 版本(关键)
    该步骤直接决定后续配置写法,是避坑核心:

    bash 复制代码
    ssh -V
  3. 查看本地客户端算法支持
    在本地终端执行,确认 Xshell、MobaXterm 等工具的算法兼容情况:

    bash 复制代码
    ssh -Q key

三、安全加固:禁用 ssh-rsa 实操

核心目标 :禁用不安全的 ssh-rsa,保留现代安全算法,配置写法需严格匹配 OpenSSH 版本。

  1. 编辑 SSH 服务配置文件

    bash 复制代码
    sudo vim /etc/ssh/sshd_config
  2. 按 OpenSSH 版本选择配置

    • 现代系统(OpenSSH ≥ 7.6)

      适用:Ubuntu 20.04+、Rocky Linux 8+、CentOS Stream 8+ 等主流发行版

      bash 复制代码
      # 黑名单模式:仅禁用ssh-rsa,保留其他安全算法
      PubkeyAcceptedKeyTypes -ssh-rsa

      💡 说明:带-前缀为黑名单语法,配置简洁,无需手动列出所有算法,默认保留系统支持的安全类型。

    • 老版本系统(OpenSSH < 7.6)

      适用:CentOS 7、Ubuntu 18.04 等(不支持黑名单语法)

      bash 复制代码
      # 白名单模式:仅允许指定安全算法,默认禁用所有未列出算法
      PubkeyAcceptedKeyTypes rsa-sha2-256,rsa-sha2-512,ssh-ed25519,ecdsa-sha2-nistp256

      💡 说明:需确保列出团队所需的所有安全算法,避免遗漏导致合法连接失败。

  3. 验证配置语法正确性

    bash 复制代码
    sudo sshd -t

    无任何输出即表示语法正确,若有报错需立即检查配置写法。

  4. 重启 SSH 服务使配置生效

    bash 复制代码
    sudo systemctl restart sshd

四、兼容性测试:生产环境必做环节

配置生效后需在测试环境完成全场景验证,避免直接上线导致生产事故。

  1. 主流终端工具算法兼容表

    工具版本 rsa-sha2-256/rsa-sha2-512 Ed25519
    Xshell 6 支持差,易协商失败 理论支持,实际兼容性差
    Xshell 8 完全支持 完全支持
    MobaXterm 完全支持 完全支持
  2. 验证配置生效与算法协商

    本地执行带调试日志的连接命令,查看实际使用的算法,确认配置生效:

    bash 复制代码
    # 替换为实际服务器用户名和IP
    ssh -vvv 用户名@服务器IP 2>&1 | grep "algorithm selection"

五、生产环境操作注意事项

  1. 配置备份 :修改前先备份原配置文件,避免配置错误导致无法连接:cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
  2. 版本先行 :务必先执行ssh -V检查版本,再选择配置写法,杜绝语法错误;
  3. 灰度发布:先在测试环境验证,再在非核心生产服务器测试,最后全量推广;
  4. 工具统一:推动团队升级至 Xshell 8 或使用 MobaXterm,解决旧版工具兼容性问题;
  5. 密钥迭代:逐步将现有 RSA 密钥替换为 Ed25519 密钥,进一步提升认证安全性。

六、总结与后续建议

本次实操核心解决了 ssh-rsa 算法的 SHA-1 漏洞风险,同时兼顾了不同系统 OpenSSH 版本的配置兼容性,实现了 SSH 认证的基础安全加固。

后续运维工作中,建议做好两点:

  1. 持续关注算法安全动态,及时禁用新发现的不安全算法,定期审计服务器 SSH 配置,形成常态化防护;
  2. 推动团队统一使用 Ed25519 密钥,既简化 SSH 配置,又能获得更高的安全等级和更优的连接性能。

SSH 安全加固并非一次性操作,只有从算法、配置、工具多维度把控,才能让服务器连接更安全。

最后不得不吐糟下AI提供的错误参数

这样会触发 OpenSSH 的解析逻辑错误:

  1. OpenSSH 会把 -ssh-rsa 当作一个完整的算法名称去匹配,而系统中根本不存在名为 -ssh-rsa 的算法。
  2. 因为配置里没有被识别为"有效允许"的算法,最终会导致所有公钥认证被拒绝,包括 rsa-sha2-256 / 512 这类原本安全的算法。
相关推荐
益达丫10 分钟前
Socket编程揭秘:端口、IP与进程通信的底层逻辑
linux·笔记
蓝速科技2 小时前
会议室门牌公告通知发布选型与落地指南丨蓝速科技
大数据·运维·数据库·人工智能·科技
chicheese3 小时前
Linux 面试速查表:从初级到高级,附高频场景答题模板
linux·运维
Linux-lucky3 小时前
32-38-Linux学习之旅之MySQL综合
linux·运维·学习·mysql·ubuntu
智能运维指南4 小时前
2026年ITSM系统怎么选?四款主流方案与五维评估模型
运维·itsm·嘉为蓝鲸
vortex54 小时前
常用终端模拟器全面对比:Kitty、WezTerm、Ghostty 与 Konsole
linux
我命由我123454 小时前
Git 推送报错:error: src refspec main does not match any
运维·git·gitee·github·运维开发·学习方法·版本控制
骇客野人4 小时前
测试环境MySQL迁移Vastbase(海量数据库)完整改造与落地实施方案
运维·服务器
迪康Defender4 小时前
终端安全实战:如何高效解决企业U盘泄密与管控难题
运维·网络·安全·web安全·终端安全管理
网安小学生(兼顾数据库版)5 小时前
固件+软件供应链:ONEKEY+Mend如何实现全链路安全覆盖
网络·安全·web安全