You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

加载SSH密钥报错“Load key "/root/.ssh/id_ed25519": error in libcrypto”求助

复制SSH密钥后出现"error in libcrypto"报错的排查方案

问题描述

每次新机器启动时,从共享驱动器复制SSH密钥对到机器中,加载密钥时持续报错:

Load key "/root/.ssh/id_ed25519": error in libcrypto

但在新机器上重新生成密钥对就能正常使用。复制密钥是否存在限制?或是密钥与生成它的机器绑定?

背景:需要用该密钥访问GitHub私有仓库,执行的命令如下:

cp [共享驱动器上公钥路径] "/root/.ssh/id_ed25519.pub"
cp [共享驱动器上私钥路径] "/root/.ssh/id_ed25519"

ssh-keyscan -t ed25519 github.com >> ~/.ssh/known_hosts
chmod go-rwx /root/.ssh/id_ed25519
git clone --filter=blob:none --no-checkout git@github.com:account/repo.git

对比复制的密钥与新生成的密钥内容完全一致,但新机器启动后复制的密钥无法使用,求排查原因。

排查步骤及解决方法

  • 检查.ssh目录权限
    SSH不仅要求私钥文件权限为600(你已经设置了go-rwx),还要求.ssh目录权限必须是700(仅所有者可读写执行)。如果目录权限过松,SSH会拒绝加载密钥。执行以下命令检查并修复:

    # 查看目录权限
    ls -ld /root/.ssh
    # 如果不是drwx------,修改权限
    chmod 700 /root/.ssh
    
  • 排查换行符/编码问题
    共享驱动器跨系统传输时,可能将私钥的换行符从Linux的LF转为Windows的CRLF,虽然内容看起来一致,但底层字节差异会导致libcrypto解析失败。用以下命令对比并修复:

    # 对比原密钥和复制后密钥的字节差异
    diff -u [共享驱动器上私钥路径] /root/.ssh/id_ed25519
    # 转换为Linux换行符
    dos2unix /root/.ssh/id_ed25519
    
  • 验证密钥合法性与libcrypto版本兼容性
    不同机器的OpenSSL/libcrypto版本差异可能导致密钥解析失败。先验证复制后的私钥是否合法:

    openssl ed25519 -in /root/.ssh/id_ed25519 -check
    

    如果验证失败,再对比生成密钥机器和新机器的OpenSSL版本:

    openssl version
    

    若版本差异过大,尝试在新机器上重新导出原密钥(如果可能),或者升级/降级OpenSSL版本适配。

  • 检查密钥文件隐性损坏
    共享驱动器文件系统可能给密钥文件添加了不可见字符或空字节,导致解析错误。用cat -A查看所有字符:

    cat -A /root/.ssh/id_ed25519
    

    正常的Ed25519私钥应包含清晰的开头、结尾标记和中间Base64内容,无多余奇怪字符。若有,手动编辑删除。

  • 排查安全模块限制
    新机器的SELinux或AppArmor可能限制SSH读取复制的文件。临时关闭SELinux测试:

    setenforce 0
    

    如果测试有效,恢复SELinux并修复上下文:

    setenforce 1
    restorecon -Rv /root/.ssh
    

内容的提问来源于stack exchange,提问作者John Doe Python

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 18:03:26