2

По какой-то причине один из моих ключей ssh "просто сломался" - он просто перестал работать:

$ ssh-add ./id_rsa
Error loading key "./id_rsa": invalid format

Копируя ключ в чистую виртуальную машину, ключ работает. Даже с точно такой же версией ssh (OpenSSH_7.8p1, OpenSSL 1.1.0i-fips 14 августа 2018 года в Fedora 28). Так что это должно быть связано с некоторыми настройками в моей системе, я полагаю.

# cat ./id_rsa
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,...

...
-----END RSA PRIVATE KEY-----

Также своеобразно: GNOME как-то удается добавить ключ при входе в систему с помощью морского конька. Затем ssh-add -L перечисляет ключ, но его нельзя использовать:

sign_and_send_pubkey: signing failed: agent refused operation

1 ответ1

4

Традиционно OpenSSH использовал тот же формат закрытого ключа, что и старый формат PEM, используемый OpenSSL. (Поскольку он использует OpenSSL для анализа ключа, он также примет более новый формат PKCS # 8.)

Таким образом, проблема может быть одной из:

  1. Ваша версия OpenSSL отказывается загружать этот формат ключа. Возможно, он случайно включил режим FIPS и отказывается от каких-либо алгоритмов, кроме тех, которые являются частью его первоначальной проверки FIPS?

    Попробуйте загрузить ключ в инструмент командной строки openssl (который, да, может также быть связан с другим libcrypto, и вы должны проверить с помощью ldd):

    openssl rsa -noout -text < id_rsa
    openssl pkey -noout -text < id_rsa
    

    Попробуйте преобразовать его в формат PKCS # 8:

    umask 077
    openssl pkey < id_rsa > id_rsa.pkcs8
    ssh-add id_rsa.pkcs8
    
  2. Ваш OpenSSH был собран без поддержки OpenSSL. Несмотря на то, что ssh -V говорит, что поддержка включена, это не означает, что двоичный файл ssh-add одинаков - он может быть получен из другой частичной установки.

    Введите type -a ssh и type -a ssh-add чтобы сравнить места установки.

    Когда вы знаете путь, используйте ldd /usr/bin/ssh-add чтобы убедиться, что он связан с libcrypto.so (криптографическая библиотека OpenSSL).


Если ничего не работает, попробуйте конвертировать ваш ключ в новый формат OpenSSH, используя ... PuTTY. Установите пакет putty для Fedora и используйте:

puttygen id_rsa -o id_rsa.newformat -O private-openssh-new
ssh-add id_rsa.newformat

Также своеобразно: GNOME как-то удается добавить ключ при входе в систему с помощью морского конька.

Более старые версии GNOME Keyring имеют внутреннюю копию кода агента SSH и не зависят от системы OpenSSH. Таким образом, они примут ключи, которые не будут приняты вашим OpenSSH. (Но с другой стороны, это означает серьезное отставание с точки зрения поддержки функций (таких как ключи Ed25519), и последняя версия GNOME Keyring просто использует вместо этого системный ssh-agent.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .