Pular para o conteúdo
ecdsa.com
OpenSSH (ssh, ssh-add, ssh-keygen, git over SSH)SSH

Mensagem de erro

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

Também aparece como

  • error in libcrypto

O caminho é o do arquivo de chave que você usou. Alguns danos geram “Load key "…": invalid format” em vez disso (em chaves PEM sem uma linha do meio, por exemplo); as causas se sobrepõem.

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

O que significa

O OpenSSH não conseguiu analisar o arquivo da chave privada no próprio formato e então o repassou ao OpenSSL (libcrypto) como uma chave PEM, o que também falhou — por isso o erro informado é o genérico “error in libcrypto”, e não um motivo preciso. No OpenSSH atual (conferido na versão 10.0), quase qualquer dano a um arquivo `OPENSSH PRIVATE KEY` termina aqui: terminações de linha do Windows, a falta da quebra de linha final, uma linha perdida ou uma chave que virou uma única linha. Chaves PEM/PKCS#8 danificadas caem aqui quando truncadas ou reduzidas a uma linha, e arquivos `.ppk` do PuTTY também.

Por que acontece

Como corrigir

  1. 1.

    Gravar as chaves do CI com os bytes exatos

    Remova o `\r`, termine com uma quebra de linha, defina o modo 600 e teste com `ssh-keygen -y` logo em seguida, para que um segredo quebrado faça a etapa de configuração falhar de forma clara.

    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.

    Examinar o início e o fim do arquivo

    O `file`, a primeira linha e os últimos bytes revelam na hora terminações CRLF, a falta da quebra de linha final ou uma chave em uma única linha.

    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

Erros relacionados

Ver toda a base de erros de assinatura