Конвертировать закрытый ключ OpenSSH в закрытый ключ SSH2


29

Есть ли способ преобразовать существующую пару ключей OpenSSH в пару ключей SSH2 (формат ssh.com)?

UPD : поскольку есть некоторые ответы о ssh-keygenвнезапно появившемся, я объясню, откуда я пришел (также это будет хороший ответ на вопрос «что вы пробовали?»).

$> diff --report-identical-files <(ssh-keygen -e -f ~/.ssh/id_dsa) <(ssh-keygen -e -f ~/.ssh/id_dsa.pub)
Files /tmp/zshAGGWAK and /tmp/zshPZiIr6 are identical

Другими словами, ssh-keygenвозвращает одинаковые ключи для закрытых и открытых ключей ввода (хэши исходных файлов, очевидно, отличаются, я дважды проверил их, чтобы убедиться, что они являются действительными закрытыми и открытыми ключами). Похоже, что ssh-keygenгенерирует только открытый ключ для частного или открытого ключа ввода.

Я делаю это неправильно или это нормальное поведение?

Ответы:


43

Этот учебник под названием: SSH: конвертируйте OpenSSH в SSH2, и, наоборот, кажется, предлагает то, что вы ищете.

Конвертировать ключ OpenSSH в ключ SSH2

Запустите версию OpenSSH ssh-keygenна вашем открытом ключе OpenSSH, чтобы преобразовать его в формат, необходимый SSH2 на удаленной машине. Это должно быть сделано в системе, в которой работает OpenSSH.

$ ssh-keygen -e -f ~/.ssh/id_dsa.pub > ~/.ssh/id_dsa_ssh2.pub

Конвертировать ключ SSH2 в ключ OpenSSH

Запустите версию OpenSSH для ssh-keygenвашего открытого ключа ssh2, чтобы преобразовать его в формат, необходимый для OpenSSH. Это необходимо сделать в системе, в которой работает OpenSSH.

$ ssh-keygen -i -f ~/.ssh/id_dsa_1024_a.pub > ~/.ssh/id_dsa_1024_a_openssh.pub

Далее учебник покажет, как генерировать ключи различных типов и как экспортировать их в другие форматы.

Использовать это для закрытых и открытых ключей?

Согласно справочной странице, ответ будет положительным. Глядя на справочную страницу для ssh-keygenэтого заявляет следующее для -eпереключателя:

 -e    This option will read a private or public OpenSSH key file and print
       the key in RFC 4716 SSH Public Key File Format to stdout.  This option
       allows exporting keys for use by several commercial SSH implementations.

Но на практике может показаться, что ssh-keygenнельзя конвертировать закрытые ключи, только открытые.

Например:

# Make a new RSA key-pair
$ ssh-keygen -t rsa -f newkey

# attempt to extract the private key
$ ssh-keygen -e -f newkey > newkey_e

# attempt to extract the public key
$ ssh-keygen -e -f newkey.pub > newkey.pub_e

# Notice the supposed extracted private key (newkey_e) and the corresponding extracted public key (newkey.pub_e) have identical `md5sum`'s.
$ for i in *;do md5sum $i;done
d1bd1c12c4a2b9fee4b5f8f83150cf1a  newkey
8b67a7be646918afc7a041119e863be5  newkey_e
13947789d5dcc5322768bd8a2d3f562a  newkey.pub
8b67a7be646918afc7a041119e863be5  newkey.pub_e

Просмотр полученных извлеченных ключей подтверждает это:

$ grep BEGIN newkey_e newkey.pub_e 
newkey_e:---- BEGIN SSH2 PUBLIC KEY ----
newkey.pub_e:---- BEGIN SSH2 PUBLIC KEY ----

Погуглив немного, я наткнулся на эту рекламу из статьи под заголовком: Как конвертировать файлы закрытого ключа OpenSSH в SSH . Сайт, казалось, работал вверх и вниз, но, глядя в кеш Google на эту страницу, я обнаружил следующую ошибку:

Как конвертировать файлы закрытого ключа OpenSSH в файлы закрытого ключа SSH.com?

Это не может быть сделано программой ssh-keygen, даже если большинство справочных страниц говорят, что это возможно. Они препятствуют этому, чтобы вы использовали несколько открытых ключей. Единственная проблема заключается в том, что RCF не позволит вам зарегистрировать более одного открытого ключа.

Далее в статье рассматривается метод преобразования закрытого ключа openssh в закрытый ключ ssh.com с помощью инструмента PuTTY puttygen . ПРИМЕЧАНИЕ: puttygen может быть запущен из Windows и Linux.

Откройте «puttygen» и сгенерируйте 2048-битную пару открытый / закрытый ключ RSA. Убедитесь, что вы добавили пароль после его создания. Сохраните открытый ключ как «puttystyle.pub» и сохраните закрытый ключ как «puttystyle». Программа замазки и программы SSH.com имеют общий формат открытого ключа, но программа замазки и OpenSSH имеют разные форматы открытого ключа. Мы вернемся к этому позже. Вы должны быть в состоянии загрузить оба ключа puttystyle в программу putty. Однако форматы закрытых ключей для putty и SSH.com не совпадают, поэтому вам придется создать преобразованный файл. Перейдите в меню конверсий и экспортируйте ключ SSH.com. Сохраните это как "sshstyle". Теперь вернитесь в меню конверсий и экспортируйте ключ openssh. Сохраните его как "openssh". Эти имена являются произвольными, и вы можете выбрать свои собственные. Вам придется изменить имена для установки на компьютер OpenSSH, позже. Увидеть ниже.

Учитывая вышесказанное, я разработал следующее puttygen, используя нашу ранее созданную пару открытых / открытых ключей openssh:

# generate ssh.com private key from private openssh key
$ puttygen newkey -O private-sshcom -o newkey.puttygen-sshcom

# generate ssh.com public key from private openssh key
$ puttygen newkey -O public -o newkey.pub_puttygen-sshcom

# generate openssh public key from private openssh key (for confirmation)
$ puttygen newkey -O public-openssh -o newkey.pub_puttygen-openssh

Комментирование отличается, поэтому вы не можете просто сравнить полученные файлы, поэтому, если вы посмотрите на первые несколько строк клавиш, это довольно хороший показатель того, что вышеприведенные команды были успешными.

Сравнение открытых ключей ssh.com:

$ tail -n +3 newkey.pub_e | head -1 | cut -c 1-60
AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wb

$ tail -n +3 newkey.pub_puttygen-sshcom | head -1 | cut -c 1-60
AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wb

Сравнение открытых ключей openssh:

$ cut -c 1-100 newkey.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wbz9x/w6I2DmSZVI9TJa6M9jgGE952QsOY

$ cut -c 1-100 newkey.pub_puttygen-openssh 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wbz9x/w6I2DmSZVI9TJa6M9jgGE952QsOY

3
а как насчет преобразования закрытого ключа?
ДМИТРИЙ МАЛИКОВ

@ ДМИТРИЙМАЛИКОВ - почему это важно? Я попробовал это, и это, кажется, работает или для закрытых или для открытых ключей.
SLM

1
Не уверен , что она возвращает действительный закрытый ключ для меня $> a="$(ssh-keygen -e -f ~/.ssh/id_rsa)m"; b="$(ssh-keygen -e -f ~/.ssh/id_rsa.pub)m"; md5sum <<< $a; md5sum <<< $b ce615aa3e39e274d0bd81064399cedf8 - ce615aa3e39e274d0bd81064399cedf8 -. Хеши оригинальных файлов разные, ессно. Похоже, что он возвращает открытый ключ для закрытого или открытого ключа ввода.
ДМИТРИЙ МАЛИКОВ

@ ДМИТРИЙМАЛИКОВ - смотрите мои обновления к ответу. Вы правы, что ssh-keygenвозвращает открытые ключи. Я разработал метод, основанный на дополнительных исследованиях. ЛМК, если это приемлемо.
SLM

1
Атрибуты puttygen могут быть хитрыми: puttygen <OpenSSH_priv_key> -O public -o id_rsa_ssh2_puttygen{.pub}( -Oобозначает выходной тип и -oвыходной файл ). Он генерирует закрытые и открытые ключи ssh2 из закрытого ключа rsa 2048 бит, сгенерированного OpenSSH 7.0. Не работает на клиенте Win Phone 7.5 (* Клиент SSH от Tommi Pirttiniemi). Но все равно спасибо @ ДМИТРИЙМАЛИКОВ и @slm за отличный ответ. @ Отеус Путтиген идет puttyна Арка.
tuk0z

1

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

Команда для преобразования вашего ~/.ssh/id_rsaфайла из формата OpenSSH в формат SSH2 (pem):

ssh-keygen -p -f ~/.ssh/id_rsa -m pem

Затем введите (старый) и новый пароль в командной строке. Они могут быть одинаковыми или даже оба могут быть пустыми. Или вы можете указать их в командной строке, используя опции -P(старая фраза-пароль) и -N(новая фраза-пароль). Например, если парольная фраза пуста, и вы хотите сохранить ее таким образом:

ssh-keygen -p -P '' -N ''-f ~/.ssh/id_rsa -m pem
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.