Как преобразовать закрытый ключ ed25519 в шпатлевку ppk?

Я хочу преобразовать закрытый ключ ed25519 (который генерируется ssh-keygen команда) в файл PPK. Но я получил ошибку.

Не удалось загрузить закрытый ключ (нераспознанное имя шифра)

Кто-нибудь может мне помочь?

  • протестированная версия openssh: OpenSSH_7.6p1, OpenSSL 1.1.0g 2 Nov 2017 а также OpenSSH_7.6p1, OpenSSL 1.0.2n 7 Dec 2017 (в док-контейнере CoreOS и ArchLinux)

  • проверенная версия шпаклевки: 0.70 64bit, 0.70 32bit а также snapshot (на окнах 10)

Моя процедура заключается в следующем.

1. Сгенерируйте закрытый ключ ed25519

# ssh-keygen -t ed25519 -a 100
Generating public/private ed25519 key pair.
Enter file in which to save the key (/root/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_ed25519.
Your public key has been saved in /root/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:2HfORujStwmC9c91rmDxMbaV9kVMT70gWxnRXAvNrNU root@f46f23bbad55
The key's randomart image is:
+--[ED25519 256]--+
|             +X B|
|           . +.@E|
|            + +.=|
|       o   o . o.|
|      . S o + +oo|
|       o = = +.=o|
|      . o = B + o|
|         o B = o |
|            = ...|
+----[SHA256]-----+

# cat .ssh/id_ed25519
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABClhk1367
G8CQYpo/0c7UShAAAAZAAAAAEAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIIJiwIymcly4s66p
za/IL3ZNyT5CiMPj0R+/LnMDmABUAAAAoMJIakdbIL7TOAmX8n4xGSrtp8mc/Mr6qimZAZ
zGB7iRhNUXT+isPdf0YuC9mh5NbX43ZYFl+/sWdi2hVmJxbGTwrjaSdNzF3ZnSpi/aVlzF
t3bUCtdwhHLaLqy9unw0zPHlfcQsB700GS/bf4VKRmm1+imj3cAldUm2RF3VdI0U9/04yX
Mj+VBOmevM0i7R/0d6xUFTH3zj99xxeLI2J6A=
-----END OPENSSH PRIVATE KEY-----

# cat .ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIJiwIymcly4s66pza/IL3ZNyT5CiMPj0R+/LnMDmABU root@f46f23bbad55

2. Беги puttygen.exe на окнах и попробуйте импортировать закрытый ключ ed25519 (.ssh/id_ed25519)

Не удалось загрузить закрытый ключ (нераспознанное имя шифра)

8 ответов

На момент написания этой статьи снимок puttygen с https://www.chiark.greenend.org.uk/~sgtatham/putty/snapshot.html кажется, поддерживает эти ключи, а 0.70 - нет. Это явно не упоминается в журнале изменений.

Я проверял Development snapshot 2019-01-17.53747ad

Команда в ответе выше просто печатает часть открытого ключа в формате RFC4716.

В какой-то момент ssh-keygen генерирует закрытый ключ openssh, который не использует шифр, поддерживаемый puttygen.

ssh-keygen не предоставляет возможность указать имя шифра для шифрования полученного закрытого ключа openssh.

Существует обходной путь: удалите ключевую фразу из ключа перед импортом в puttygen.

$ cp ~/.ssh/id_ed25519 ~/.ssh/id_ed25519-for-putty

$ ssh-keygen -p -f ~/.ssh/id_ed25519-for-putty
Enter old passphrase: <your passphrase>
Enter new passphrase (empty for no passphrase): <press Enter>
Enter same passphrase again: <press Enter>

Затем используйте puttygen для преобразования ~/.ssh/id_ed25519-for-putty в.ppk и установите фразу-пароль из puttygen.

Не забудьте уничтожить и удалить ~/.ssh_id_ed25519-for-putty по понятной причине.

Вам необходимо экспортировать ключ в формат RFC4716 перед импортом ключа в puttygen

$ ssh-keygen -e -m RFC4716 -f ~/.ssh/id_ed25519 > ~/.ssh/exported_id_ed25519

Затем импортируйте полученный exported_id_ed25519 в puttygen и конвертируйте ключ в.ppk

На самом деле эта проблема не касается самого Ed25519. Это происходит из-за нового формата openssh. Вот что man ssh-keygen показывает о опции -o.

-o Заставляет ssh-keygen сохранять приватные ключи, используя новый формат OpenSSH, а не более совместимый формат PEM. Новый формат обладает повышенной устойчивостью к взлому паролем, но не поддерживается версиями OpenSSH до 6.5. Ключи Ed25519 всегда используют новый формат закрытого ключа.

Новый формат шифрует файл закрытого ключа несколько раз (обычно около 100 раз) с помощью функции выведения ключей (KDF) для замедления процесса расшифровки. Поиск дополнительной информации о новом формате с использованием bcrypt KDF можно начать по этой ссылке: https://pthree.org/2014/12/08/super-size-the-strength-of-your-openssh-private-keys/

вы можете попробовать ssh-keygen с опцией -o для закрытого ключа типа rsa или dsa и увидеть, что puttygen также не может их проанализировать. И, как вы можете видеть на странице руководства, у вас нет выбора для puttygen в Ed25519.

После некоторых трудностей, теперь я просто использую ключи, сделанные с использованием puttygen, но боюсь, что не смогу получить выгоду от KDF.

Я только что наткнулся на ту же проблему. Закрытый ключ был абсолютно действительным, но PuTTYGen отказался принять его с сообщением « Не удалось загрузить закрытый ключ (не распознанный формат ключа) ».

Через некоторое время я понял, что это произошло потому, что я скопировал его из терминала Linux в консоль Windows. Полученный приватный ключ выглядел точно так же, но имел разную длину — видимо, из-за разного переноса строки в Linux и Windows.

Когда я скопировал закрытый ключ в виде файла по сети, PuTTYGen с радостью его принял.

Подумал, что это может быть полезно для тех, кто попал в ту же ловушку, что и я.

Хотя есть принятый ответ, способ преобразования уже сгенерированного закрытого ключа (id_rsa) в формат шпатлевки:

  1. используйте эту команду: ssh-keygen -p -P "<old pass phrase>" -N "<new pass phrase>" -m PEM -f id_rsa преобразовать ключ в шпатлевку приемлемого формата
  2. Откройте PuttyGen и в верхнем меню выберите Конверсии, а затем Импортировать ключ (здесь вам будет предложено ввести кодовую фразу, введите ее, если вы предоставили ее при генерации ключа, и нажмите ОК)
  3. Наконец, нажмите Сохранить закрытый ключ, и все готово!

Я думаю, генератор ключей-замазок обладает такой способностью.

  1. Выберите Конверсии -> Импортировать ключ в строке меню.
  2. Импортируйте в него свой ключ ed25519.
  3. Сохраните закрытый ключ с расширением ppk.

Тогда тебе хорошо идти, я полагаю

У меня была такая же проблема при недавнем развертывании системы Debian и обновлении моих приложений для замазки, которые были с 0,70 до 0,72, устранили проблему. Закрытый ключ был сгенерирован с помощью приведенной ниже команды в моей системе Debian, а затем перенесен на мой компьютер с Windows.

ssh-keygen -b 4096

Другие вопросы по тегам