跳到主要内容
ecdsa.com
OpenSSH其他工具

错误信息

Load key "/path/to/key": invalid format

路径按每次调用填入。措辞取决于构建 OpenSSH 时使用的密码学库:使用 OpenSSL 1.1 或 LibreSSL(macOS)时,下面列出的每种失败都会打印“invalid format”;使用 OpenSSL 3 构建的版本(Ubuntu 22.04 及更高版本、Debian 12 及更高版本)对其中大多数情况打印“error in libcrypto”,只有损坏的 PEM 格式密钥仍打印“invalid format”。如果密钥正文中有字符被改动,所有构建都会报出“unknown or unsupported key type”。

OpenSSH — ssh, ssh-keygen, ssh-add

含义

OpenSSH 尝试加载私钥文件,但无法用它支持的任何格式(OPENSSH PRIVATE KEY、PKCS#8、旧式 PEM)解析。文件已损坏、被截断、是 PuTTY 的 .ppk 这类外部格式,或者根本不是私钥——这是文件格式层面的失败,发生在任何密码短语处理或与服务器交互之前。

原因

修复方法

  1. 1.

    先检查文件的首尾结构

    查看第一行和最后一行,再做一次有效性探测(当且仅当私钥能被解析时,-y 才会打印出公钥),几秒钟内就能确定失败属于哪一类。

    bash
    head -1 ~/.ssh/id_ecdsa      # -----BEGIN OPENSSH PRIVATE KEY-----
    tail -c 50 ~/.ssh/id_ecdsa | xxd | tail -1   # must end with 0a (newline)
    ssh-keygen -y -f ~/.ssh/id_ecdsa             # parses? prints the public key
  2. 2.

    将 PuTTY 密钥转换为 OpenSSH 格式

    用 puttygen 转换一次;之后这个密钥就能用于 ssh、ssh-add 和 ssh-agent。

    bash
    puttygen key.ppk -O private-openssh -o ~/.ssh/id_converted
    chmod 600 ~/.ssh/id_converted
  3. 3.

    无损地传输密钥

    用 scp/rsync 而不是剪贴板传输密钥文件,保持权限为 600;如果私钥无法恢复,就生成新的密钥对——现代 OpenSSH 推荐使用 Ed25519。

    bash
    scp -p old-host:~/.ssh/id_ecdsa ~/.ssh/
    # or start clean:
    ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519

相关错误

浏览完整的签名错误库