跳到主要内容
ecdsa.com
OpenSSH (ssh, ssh-add, ssh-keygen, git over SSH)SSH

错误信息

Load key "/path/to/key": error in libcrypto

也可能输出为

  • error in libcrypto

路径是你所用的密钥文件。有些损坏会改为产生“Load key "…": invalid format”(例如 PEM 密钥中间缺了一行);两者的原因有重叠。

OpenSSH (ssh, ssh-add, ssh-keygen, git over SSH) — key file could not be parsed

含义

OpenSSH 无法按自己的格式解析私钥文件,于是把它当作 PEM 密钥交给 OpenSSL(libcrypto),结果同样失败——因此报告的错误是笼统的“error in libcrypto”,而不是具体原因。在当前的 OpenSSH 中(已在 10.0 上核实),`OPENSSH PRIVATE KEY` 文件几乎任何形式的损坏都会落到这里:Windows 换行符、缺少末尾换行符、丢了一行,或者密钥被压成了一行。损坏的 PEM/PKCS#8 密钥在被截断或压成一行时也会落到这里,PuTTY 的 `.ppk` 文件同样如此。

原因

修复方法

  1. 1.

    逐字节准确地写入 CI 密钥

    去掉 `\r`,以换行符结尾,把权限设为 600,并立即用 `ssh-keygen -y` 测试,让损坏的机密在准备步骤中就明确报错。

    bash
    # CI: write the key exactly, normalise line endings, guarantee the final newline, restrict permissions
    install -d -m 700 ~/.ssh
    printf '%s\n' "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_ed25519
    chmod 600 ~/.ssh/id_ed25519
    ssh-keygen -y -f ~/.ssh/id_ed25519 > /dev/null && echo "key parses"
  2. 2.

    检查文件的首尾结构

    `file` 命令的输出、第一行和最后几个字节,能立即暴露 CRLF 换行符、缺失的换行符或被压成一行的密钥。

    bash
    file ~/.ssh/id_ed25519                  # "OpenSSH private key" vs "with CRLF line terminators"
    head -1 ~/.ssh/id_ed25519; tail -c 40 ~/.ssh/id_ed25519 | od -c | tail -3   # framing and final "\n"
    wc -l ~/.ssh/id_ed25519                 # a one-line file means the newlines were lost

相关错误

浏览完整的签名错误库