Популярным SSH-клиентом для Windows является PuTTY, на Linux же администраторы обычно используют утилиту ssh из состава пакета OpenSSH. Каждый из этих инструментов является кроссплатформенным, но за пределами "родных" платформ они используются редко.
Если есть необходимость работать как из под Windows, так и из под Linux то возникает проблема при попытке использования одних и тех же ключей с разными утилитами (они используют разные форматы хранения ключей). Далее будет показано как можно конвертировать ключи из формата OpenSSH в PPK (PuTTY) и обратно.
На Windows-машине должна быть установлена последняя версия PuTTY (обязательно вместе с puttygen.exe). На Linux-машине в зависимости от направления кодирования понадобятся ssh-keygen из состава OpenSSH и puttygen из состава PuTTY. В Debian/Ubuntu их можно установить командой:
apt-get install putty-tools openssh-client
Перекодируем на Linux-машине OpenSSH-ключ в формат PPK
Допустим что у нас есть ключ, сгенерированный командой:
ssh-keygen -t ed25519 -f mykey_ed25519
Чтобы перекодировать его в формат PPK достаточно выполнить команду:
puttygen mykey_ed25519 -o putty_key_ed25519.ppk
Перекодируем на Linux-машине PPK-ключ для использования с OpenSSH
Тут нам так же поможет утилита puttygen. Извлекаем приватный ключ:
puttygen putty_key_ed25519.ppk -O private-openssh -o openssh_key_ed25519
Извлекаем публичный ключ:
puttygen putty_key_ed25519.ppk -O public-openssh -o openssh_key_ed25519.pub
Так же публичный ключ можно извлечь командой:
ssh-keygen -i -f putty_key_ed25519.ppk > openssh_key_ed25519.pub
Перекодируем ключи Windows-машине
Здесь нам снова поможет утилита puttygen. В версии для Windows она имеет удобный графический интерфейс. Независимо от направления конвертирования необходимо в меню «Conversions» выбрать пункт «Import key» и указать исходный файл.
Для получения ключа в формате PPK достаточно нажать кнопку «Save private key» и указать имя файла для сохранения. Для получения приватного ключа в формате OpenSSH нужно выбрать в меню «Conversions» пункт «Export OpenSSH key» и указать имя файла.
К сожалению красивого способа получить публичный ключ в формате OpenSSH на Windows нет. Но если очень хочется то проблему решится конечно же можно:)
Для начала нужно открыть PPK-файл в любом текстовом редакторе (ВАЖНО! ключ не должен быть зашифрован!) и увидеть примерно вот такую картину:
PuTTY-User-Key-File-2: ssh-ed25519 Encryption: none Public-Lines: 2 AAAAC3NzaC1lZDI1NTE5AAAAIPmNkIEw1hfDMl16E102K2TnQB/uHc3vwVbHYklB ojo0 Private-Lines: 1 AAAAIJGP/+qEHF+7AyWPep5Gbs8RraFihEz3kUPeBbP0PQHz Private-MAC: 7b4f475a723535bd82bdb997d56c089745bbe929
Здесь в строке "PuTTY-User-Key-File-2" указывается тип ключа, а цифра в строке "Public-Lines" указывает сколько строк ниже неё содержат данные публичного ключа. Достаточно собрать все эти данные в одну строчку и получится публичный ключ. В нашем примере результат будет таким:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPmNkIEw1hfDMl16E102K2TnQB/uHc3vwVbHYklBojo0
Эту строку можно сразу добавлять в authorized_keys на ваших серверах. На этом всё. Приятной работы!