当前位置: 首页 > news >正文

解决Rocky Linux 9.6下Beyond Compare私钥连接失败问题

在Linux服务器运维场景中,远程工具连接异常是高频问题之一。近期在Rocky Linux 9.6系统环境下,使用Beyond Compare工具通过私钥认证连接服务器时,多次出现连接中断的情况。经过逐层排查日志、梳理OpenSSH安全策略逻辑,最终定位到问题根源并落地解决。本文将完整还原问题排查流程、深度解析技术原理,并提供三种可根据实际场景灵活选择的解决方案,帮助运维及开发人员高效解决同类问题。

一、问题现象:连接失败的详细表现

在使用Beyond Compare配置私钥连接Rocky Linux 9.6服务器时,整个连接流程未进入文件比对环节便直接中断,工具端弹出明确的错误提示窗口,日志信息如下:

  • 连接时序:[具体时间1] 正在连接到[服务器IP](IP已隐藏,实际为目标服务器公网/内网IP)
  • 密钥识别:[具体时间2] 服务器密钥 [RSA SHA256:okVCPpzAauMlyfxzB7hob8zdxwuMVTFOaCfxBq56Zxo](服务器公钥指纹正常识别)
  • 认证中断:[具体时间3] 没有更多的认证方式可用(私钥认证未通过,无其他认证方式兜底)
  • 最终错误:[具体时间4] 连接失败: Connection lost due to error 96258(错误码96258对应SSH认证协议协商失败)

从表面现象看,工具能正常识别服务器公钥,但私钥认证环节被拒绝。由于工具端日志仅提示“无可用认证方式”,无法获取更具体的拒绝原因,因此需要转向服务器端日志排查。

二、日志深度排查:锁定核心错误原因

Linux系统中,SSH服务的认证日志、连接日志默认存储在/var/log/secure文件中(部分Debian/Ubuntu系统存储在/var/log/auth.log)。通过实时日志查看命令,可捕捉连接过程中的关键错误信息:

1. 执行日志查看命令

登录Rocky Linux 9.6服务器(可通过密码登录临时绕过私钥问题),在终端执行以下命令,实时监控SSH服务日志:

# 实时跟踪secure日志的最新输出,-f参数表示“跟随”日志更新
tail -f /var/log/secure

2. 捕捉关键错误日志

在保持日志跟踪的同时,重新使用Beyond Compare发起连接,此时服务器端日志会立即输出以下关键信息:

[具体时间] htlx-pro-03 sshd[6627]: userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]
[具体时间] htlx-pro-03 sshd[6627]: Connection closed by authenticating user root [客户端IP] port 38639 [preauth]
[具体时间] htlx-pro-03 sshd[6629]: userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]
[具体时间] htlx-pro-03 sshd[6629]: Connection closed by authenticating user root [客户端IP] port 40649 [preauth]

3. 日志信息解读

日志中重复出现的userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms是核心线索,含义为:服务器的SSH配置中,PubkeyAcceptedAlgorithms(公钥可接受算法列表)未包含ssh-rsa类型,导致客户端提交的ssh-rsa私钥认证被直接拒绝

进一步查看服务器OpenSSH版本,确认问题背景:

# 查看OpenSSH服务器版本
sshd -V
# 输出示例:OpenSSH_8.8p1, OpenSSL 1.1.1k  FIPS 25 Mar 2021

Rocky Linux 9.6默认搭载的OpenSSH 8.8版本,正是导致问题的关键——从该版本开始,OpenSSH官方默认禁用了ssh-rsa算法。

三、技术原理解析:为什么ssh-rsa被禁用?

要彻底理解问题,需先理清“RSA密钥”与“签名算法”的区别,以及OpenSSH 8.8的安全策略变化。

1. 核心概念:RSA密钥 vs 签名算法

很多人会误以为“ssh-rsa被禁用”意味着“RSA密钥不能用”,这是典型的概念混淆。两者的关系如下:

  • RSA密钥:指通过RSA算法生成的密钥对(公钥如id_rsa.pub,私钥如id_rsa),仅用于存储加密/解密的密钥信息,不包含任何签名算法逻辑。
  • 签名算法:指在SSH连接时,客户端使用私钥对数据进行签名的算法(如SHA-1、SHA-256),服务器通过公钥验证签名合法性。

关键结论:RSA密钥文件无需重新生成,只需客户端支持更安全的签名算法,即可与现代SSH服务器兼容。

2. OpenSSH 8.8的安全策略升级

OpenSSH 8.8版本之前,默认支持ssh-rsa签名算法(基于SHA-1哈希算法);从8.8版本开始,官方默认禁用ssh-rsa,原因是:

  • SHA-1算法存在安全漏洞,已被证实可通过碰撞攻击伪造哈希值,不符合《FIPS 140-3》等现代安全标准。
  • 替代方案:推荐使用基于SHA-2系列的rsa-sha2-256rsa-sha2-512算法,安全性更高且兼容性更广。

3. 新旧客户端的连接逻辑差异

客户端(如Beyond Compare)的签名算法支持能力,直接决定了连接是否成功。具体差异如下表所示:

客户端类型支持的签名算法列表与OpenSSH 8.8+服务器的协商过程连接结果
旧版Beyond Compare(如4.3及以下)仅支持ssh-rsa(SHA-1)客户端仅提交ssh-rsa,服务器因未包含该算法而拒绝失败
新版Beyond Compare(4.4及以上)支持ssh-rsarsa-sha2-256rsa-sha2-512客户端提交所有支持算法,服务器选择rsa-sha2-256/rsa-sha2-512成功

四、三种解决方案:从临时兼容到长期安全

根据实际场景需求(如是否需要保留旧工具、是否追求极致安全、是否允许修改服务器配置),可选择以下三种解决方案,覆盖“临时应急”“快速兼容”“长期安全”三类需求。

方案一:生成ed25519密钥(推荐长期使用,安全最优)

ed25519是基于椭圆曲线加密(ECC)的SSH密钥算法,相比传统RSA密钥,具有密钥长度更短(仅256位)、加密速度更快、安全性更高的优势,是OpenSSH官方推荐的新一代密钥标准。适用于追求长期安全、愿意更换密钥的场景。

操作步骤(以Windows 10/11、macOS、Linux本地环境为例):
  1. 生成ed25519密钥对

    • Windows系统:需安装Git Bash、WSL(Windows Subsystem for Linux)或OpenSSH客户端(系统设置→应用→可选功能→添加“OpenSSH客户端”),打开终端后执行命令。
    • macOS/Linux系统:直接打开终端,执行以下命令:
      # -t 指定密钥类型为ed25519;-C 为密钥添加备注(建议用邮箱,便于识别)
      ssh-keygen -t ed25519 -C "your_email@example.com"
      
    • 命令执行后,会提示以下信息,按需求操作:
      # 1. 选择密钥存储路径(默认路径:Windows为C:\Users\用户名\.ssh\,macOS/Linux为~/.ssh/)
      # 直接回车使用默认路径,避免后续查找困难
      Enter file in which to save the key (/Users/yourname/.ssh/id_ed25519): # 2. 设置密钥密码(可选,建议设置,增强安全性,防止私钥泄露后被滥用)
      # 输入密码时无明文显示,输入完成后回车;如需跳过密码,直接回车
      Enter passphrase (empty for no passphrase): 
      Enter same passphrase again: 
      
    • 生成成功后,在默认路径下会生成两个文件:
      • id_ed25519:私钥文件(重要!不可泄露给他人,仅保存在本地)。
      • id_ed25519.pub:公钥文件(需上传到服务器,用于认证)。
  2. 将公钥上传到Rocky Linux服务器

    • 方法一:使用ssh-copy-id命令自动上传(推荐,操作简单)
      # 格式:ssh-copy-id -i 本地公钥路径 服务器用户名@服务器IP
      # 示例(假设服务器用户为root,IP为[服务器IP],公钥在默认路径):
      ssh-copy-id -i ~/.ssh/id_ed25519.pub root@[服务器IP]
      
      执行后,输入服务器用户密码(因当前私钥未生效,需用密码临时认证),公钥会自动追加到服务器/root/.ssh/authorized_keys文件中(普通用户路径为~/.ssh/authorized_keys)。
    • 方法二:手动上传(适用于ssh-copy-id命令不可用的场景)
      • 先查看本地公钥内容:
        # Windows/macOS/Linux通用命令,查看公钥文本
        cat ~/.ssh/id_ed25519.pub
        
      • 复制输出的公钥全文(格式如ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK... your_email@example.com)。
      • 登录服务器,编辑authorized_keys文件:
        # 编辑root用户的authorized_keys文件
        vim /root/.ssh/authorized_keys
        
      • 在文件末尾粘贴复制的公钥文本,按Esc后输入:wq保存退出。
  3. Beyond Compare配置新私钥连接

    • 打开Beyond Compare,新建“SFTP连接”,在“认证”选项卡中:
      • 选择“私钥文件”,点击“浏览”,找到本地id_ed25519私钥文件。
      • 若生成密钥时设置了密码,在“密码”栏输入密钥密码;若无,留空。
    • 点击“连接”,即可通过ed25519私钥成功认证,进入文件比对界面。

方案二:升级Beyond Compare(最简单,无需修改服务器)

若不想更换密钥,且服务器不允许修改配置,直接升级Beyond Compare到最新版本即可解决问题。因为新版工具已升级加密库,支持rsa-sha2-256rsa-sha2-512签名算法,可自动与服务器协商兼容的算法。

操作步骤:
  1. 查看当前Beyond Compare版本

    • 打开Beyond Compare,点击菜单栏“帮助”→“关于Beyond Compare”,查看版本号(若低于4.4.0,建议升级)。
  2. 下载并安装最新版本

    • 访问Beyond Compare官方下载页(https://www.scootersoftware.com/download.php),根据本地系统(Windows/macOS/Linux)选择对应版本下载。
    • 安装过程中,保持默认配置即可(无需卸载旧版本,安装程序会自动覆盖升级)。
  3. 重新连接服务器

    • 升级完成后,打开Beyond Compare,使用原有的RSA私钥(如id_rsa)重新配置连接。
    • 工具会自动检测服务器支持的签名算法,提交rsa-sha2-256rsa-sha2-512进行认证,无需手动调整任何参数,即可成功连接。

方案三:服务器端临时放开ssh-rsa(兼容旧工具,短期应急)

若因特殊原因(如必须使用旧版Beyond Compare,且无法更换密钥),可在服务器端临时修改SSH配置,允许ssh-rsa算法。注意:此方案会降低服务器安全性(启用SHA-1算法),仅建议作为短期应急方案,不推荐长期使用

操作步骤:
  1. 编辑SSH服务器配置文件

    • 登录Rocky Linux服务器,执行以下命令打开SSH配置文件:
      # 使用vim编辑sshd_config文件(需root权限)
      vim /etc/ssh/sshd_config
      
  2. 添加ssh-rsa到可接受算法列表

    • 在文件末尾添加以下内容(不同OpenSSH版本可能需要不同关键词,先尝试第一个,若无效则替换为第二个):
      # 方案A:适用于OpenSSH 8.8+版本(Rocky Linux 9.6默认适用)
      PubkeyAcceptedAlgorithms +ssh-rsa# 方案B:若方案A无效(如部分旧版本衍生系统),替换为以下内容
      # PubkeyAcceptedKeyTypes +ssh-rsa
      
    • 说明:+ssh-rsa表示“在原有算法列表基础上,追加ssh-rsa”,而非“仅保留ssh-rsa”,确保不影响其他安全算法的使用。
  3. 重启SSH服务使配置生效

    • 执行以下命令重启SSH服务,注意:重启服务不会断开当前已连接的会话,无需担心远程连接中断:
      # Rocky Linux 9.6使用systemd管理服务,执行以下命令
      systemctl restart sshd# 验证服务是否重启成功
      systemctl status sshd
      # 输出“active (running)”表示重启成功
      
  4. 验证连接

    • 使用旧版Beyond Compare和原RSA私钥重新连接,此时服务器会接受ssh-rsa算法,连接即可成功。
    • 应急场景结束后,建议删除sshd_config中添加的PubkeyAcceptedAlgorithms +ssh-rsa行,重启SSH服务,恢复默认安全配置。

五、总结与最佳实践建议

本次问题的本质是“旧工具的加密算法支持与现代SSH服务器的安全策略不兼容”。结合排查过程和解决方案,给出以下最佳实践建议:

  1. 优先选择安全方案:从长期运维角度,推荐使用方案一(ed25519密钥)方案二(升级工具) ,避免因临时兼容配置降低服务器安全性。ed25519密钥的安全性和性能优势,使其成为未来SSH密钥的主流标准。

  2. 善用服务器日志排查:遇到SSH连接问题时,/var/log/secure(Rocky Linux/CentOS)或/var/log/auth.log(Debian/Ubuntu)是核心排查工具。日志中的userauth_pubkeyConnection closed等关键词,能快速定位认证失败原因,避免盲目尝试解决方案。

  3. 定期升级工具与系统:旧版工具不仅可能存在安全漏洞,还可能因协议支持不足导致兼容性问题。建议定期升级Beyond Compare、PuTTY等远程工具,同时保持服务器系统(如Rocky Linux)和OpenSSH的更新,确保安全补丁及时生效。

  4. 密钥管理规范:无论使用RSA还是ed25519密钥,都需遵循以下规范:

    • 私钥仅保存在本地安全环境,不通过邮件、即时通讯工具传输。
    • 为私钥设置密码(ssh-keygen时的passphrase),防止私钥文件泄露后被滥用。
    • 定期轮换密钥(如每6个月生成新密钥,删除旧密钥),降低长期使用风险。

通过以上方法,不仅能解决当前的Beyond Compare私钥连接问题,还能建立更安全、更稳定的远程服务器连接体系,避免同类问题再次发生。


文章转载自:

http://4iNLAGPO.dnphd.cn
http://qjYFVMsF.dnphd.cn
http://GsGCIXjC.dnphd.cn
http://TN0rwo1r.dnphd.cn
http://Jyhyh6qS.dnphd.cn
http://quqHtQdb.dnphd.cn
http://hL7T3OvW.dnphd.cn
http://JzlSjwm2.dnphd.cn
http://WFXdpojc.dnphd.cn
http://W91PqrRv.dnphd.cn
http://U8Cljiif.dnphd.cn
http://UCvvy8Cp.dnphd.cn
http://ru1lAJUy.dnphd.cn
http://wrdO20BV.dnphd.cn
http://79iairQL.dnphd.cn
http://Cvx8S6b1.dnphd.cn
http://gfkYdJkF.dnphd.cn
http://FB53K0LB.dnphd.cn
http://v16d53S2.dnphd.cn
http://JQiUcRSp.dnphd.cn
http://cMKpm2eL.dnphd.cn
http://Wh3uEe2e.dnphd.cn
http://nshNVpiR.dnphd.cn
http://7zZ5oUu8.dnphd.cn
http://mEyknXqr.dnphd.cn
http://4CYMHe9T.dnphd.cn
http://OZweCvej.dnphd.cn
http://uZapu6EI.dnphd.cn
http://DVdcpbpJ.dnphd.cn
http://dC5Jw32R.dnphd.cn
http://www.dtcms.com/a/381695.html

相关文章:

  • ubuntu git push每次都要输入密码怎么解决只输入一次密码
  • OpenCV 教程——从像素到智能:图像预处理关键技巧与零售货架缺货检测实战
  • 面试鸭Java八股之Kafka
  • 【学习K230-例程23】GT6700-音频FFT柱状图
  • 【Chrome】chrome 调试工具的network选项卡,如何同时过滤出doc js css
  • python--MediaPipe-opencv眨眼检测
  • 2.2.蓝桥杯-数位递增的数
  • leetcode 3541. 找到频率最高的元音和辅音 简单
  • Spring Boot 与微服务网关集成问题:Zuul、Spring Cloud Gateway 与鉴权策略
  • algorithm | Big O notation
  • 开发指南:使用 MQTTNet 库构建 .Net 物联网 MQTT 应用程序
  • 【代码随想录day 25】 力扣 47.全排列 II
  • 驱动开发系列73 - clEnqueueNDRangeKernel实现
  • Unity 性能优化 之 静态资源优化 (音频 | 模型 | 纹理 | 动画)
  • 服装贸易管理系统推荐及软件选型指南
  • 音视频的下一站:协议编排、低时延工程与国标移动化接入的系统实践
  • Python核心技术开发指南(064)——with语句
  • 打造高效AI助手的秘密武器 - Parlant
  • Stanford CS336 | Assignment 1 - Transformer Language Model Architecture
  • 计算机视觉(opencv)实战十八——图像透视转换
  • 【二开】CRMEB开源版按钮权限控制
  • 联邦学习过程中,了解清楚影响准确率的因素有哪些也很重要
  • Ubuntu 文件复制大师:精通cp命令完整指南
  • 给定单词倒排
  • Golang | http/server Gin框架简述
  • Android-EDLA XTS常用网站总结
  • Android webview更新记录-aosp
  • 大数据电商流量分析项目实战:Flume 数据采集及ETL入仓(五)
  • 用 PyTorch 打造 AIOps 小体系:日志异常、指标预测与训练失败根因分析
  • 涂鸦智能携手亚马逊云科技,以全球基础设施与生成式AI加速万物智联时代到来