ssh: ошибка загрузки ключа "./id_rsa": неверный формат

1676
FlorianLudwig

По какой-то причине один из моих ключей 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 
2

1 ответ на вопрос

2
grawity

Традиционно 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.)

Спасибо за длинный ответ! 1. открытие ключа с помощью openssl работает: `` `openssl rsa -noout -text <id_rsa openssl pkey -noout -text <id_rsa` `` Также у меня есть другие ключи ssh, которые имеют тот же заголовок и работают нормально. 2. преобразование в преобразование в формат PKCS # 8 работает. Я могу использовать ключ в PKCS # 8 3. Тогда другие ключи не будут работать или нет? 4. Что касается GNOME, это текущая версия GNOME, и он запускает агент OpenSSH (что подтверждается `ps`) --- Так что у меня есть обходной путь, спасибо! Все еще задаюсь вопросом, ПОЧЕМУ. Что не так / что случилось ... FlorianLudwig 5 лет назад 0

Похожие вопросы