Перетворити приватний ключ 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

Запустіть версію ssh-keygenOpenSSH відкритого ключа 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 не дозволить вам зареєструвати більше одного відкритого ключа.

У статті йдеться про спосіб перетворення приватного ключа opensh до приватного ключа ssh.com за допомогою інструмента PuTTY puttygen . ПРИМІТКА: puttygen можна запустити з Windows та Linux.

Відкрийте 'puttygen' та генеруйте 2048-бітну пару публічних / приватних ключів rsa. Переконайтеся, що ви додали пароль після його генерування. Збережіть відкритий ключ як "puttystyle.pub" і збережіть приватний ключ як "puttystyle". Програма шпаклівки та програми SSH.com мають спільний формат відкритого ключа, але програма шпаклівки та OpenSSH мають різні формати відкритого ключа. Ми повернемося до цього пізніше. Ви повинні мати можливість завантажувати обидва ключі шпаклівки в програму шпаклівки. Однак формати приватних ключів для putty та SSH.com не однакові, тому вам доведеться створити перетворений файл. Перейдіть у меню конверсій та експортуйте ключ SSH.com. Збережіть це як "sshstyle". Тепер поверніться до меню конверсій та експортуйте відкритий ключ. Збережіть це як "openssh". Ці назви довільні, і ви можете вибрати власне. Пізніше вам доведеться змінити імена для установки на машині OpenSSH. Дивись нижче.

З огляду на вищесказане, я розробив наступне puttygen, використовуючи попередньо створену приватну / публічну відкриту пару ключів:

# 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

Порівняння відкритих ключів:

$ 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повертаєте відкриті ключі. Я розробив метод, заснований на додаткових дослідженнях. LMK, якщо це прийнятно.
slm

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

1

ssh-keygenне експортує приватний ключ у форматі pem, але він перетворить існуючий відкритий приватний ключ у формат 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.