Як отримати відкритий ключ із приватного ключа SSH?


444

Приватний ключ SSH, що генерується, ssh-keygenмістить частину відкритого ключа. Як отримати цей відкритий ключ із приватного ключа? Я втратив свій відкритий ключ і потрібно вмістити цей відкритий ключ у authorized_keysфайл серверів і не хочу створювати нову пару ключів.

Як варіант: як створити id_rsa.pubфайл з id_rsaфайлу?


pbcopy > ~/.ssh/id_rsa.pubой.
Нік Т

@NickT - pbcopy - це команда MacOSX. Крім того, марно, якщо ви перезавантажили, вийшли з системи або скопіювали щось інше до буфера обміну.
jsnfwlr

Відповіді:


681

Я знайшов відповідь про помилку сервера: створити відкритий ключ SSH з приватного ключа?

Параметр -yвиводить відкритий ключ:

ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub

Як бічна примітка, коментар відкритого ключа втрачається. У мене був сайт, який вимагав коментаря (Launchpad?), Тому вам потрібно відредагувати ~/.ssh/id_rsa.pubта додати коментар до першого рядка з пробілом між коментарями та ключовими даними. Приклад відкритого ключа показаний усіченим нижче.

ssh-rsa AAAA..../VqDjtS5 ubuntu@ubuntu

Для ключів, доданих до агента SSH (програми, яка працює у фоновому режимі і уникає необхідності повторного введення парольної фрази ключового слова знову і знову), ви можете скористатися ssh-add -Lкомандою, щоб перелічити відкриті ключі для ключів, доданих до агент (через ssh-add -l). Це корисно, коли ключ SSH зберігається на смарт-картці (а доступ до файлу приватного ключа неможливий).


1
Зверніть увагу, що файл вашого приватного ключа ~/.ssh/id_rsaповинен бути обмежений вашим іменем користувача. використовувати $ sudo chmod 600 ~/.ssh/id_rsaта ввести ваші кореневі облікові дані, щоб обмежити це, тоді ви можете вивести файл відкритого ключа. Інакше ви отримаєте необмежене попередження про файл приватного ключа.
Марк Мікофскі

12
@MarkMikofski Немає необхідності sudo, ви повинні вже мати приватний ключ. В іншому випадку ви не можете прочитати його в першу чергу.
Лекенштейн

7
@Lekensteyn дякую, звичайно, ти маєш рацію !. Також 400рекомендується, оскільки не потрібно писати вводити файл приватного ключа. Виправлена ​​команда повинна бути$ chmod 400 ~/.ssh/id_rsa
Марк Мікофський

Коментар із приватним ключем втрачено. Див stackoverflow.com/questions/38290929 / ...
weberjn

1
@weberjn У приватному ключі ( id_rsaфайлі) немає коментарів, але дійсно коментар у файлі відкритого ключа ( id_rsa.pub) втрачається.
Лекенштейн

14

Це рішення спеціально для користувачів, які використовують Windows для SSH на віддалених машинах, включаючи зображення хмари на Amazon AWS та GCE.

(Відмова)

Нещодавно я використав це рішення для віддаленого входу в нові розгорнуті зображення VM на GCE.


Використовувані інструменти:

  1. puttygen
  2. WinSCP

Кроки до виконання:

  1. Створіть пара відкритих та приватних ключів за допомогою puttygen.
  2. Завантажте відкритий ключ на свій сервер у хмарному чи віддаленому місці.

Опис (як це зробити):

  1. Створіть ключ / пару або використовуйте наявний приватний ключ:

    Якщо у вас є приватний ключ:

    Відкрийте puttygen, натисніть кнопку завантаження та виберіть файл приватного ключа (* .pem).

    Якщо ви НЕ маєте закритий ключ:

    • Відкритий шпатлін,
    • Виберіть потрібний тип ключа SSH2 DSA (ви можете використовувати RSA або DSA) у розділі Параметри ... і важливо, щоб ви залишили поле парольної фрази порожнім,
    • Натисніть "Створити" та дотримуйтесь інструкцій, щоб створити (публічні / приватні) пари ключів.

    Рис

  2. Створіть новий файл "авторизованих_контролів" (за допомогою блокнота):

    Скопіюйте дані свого відкритого ключа із розділу "Публічний ключ для вставки у файл OpenSSH-авторизованих ключів" у генераторі ключів PuTTY та вставте ключові дані у файл "дозволені_кільки".

    Переконайтеся, що в цьому файлі є лише один рядок тексту.

  3. Завантажте ключ на сервер Linux:

    • Відкрити WinSCP,
    • Виберіть протокол файлу SFTP та увійдіть за допомогою своїх SSH-облікових даних.
    • Після успіху ви бачите структуру домашнього каталогу на віддаленій машині.

    Завантажте файл дозволених ключів у домашній каталог на віддаленій машині.

  4. Встановити належні дозволи:

    Зробіть .sshкаталог (якщо він не існує)

    Скопіюйте authorized_keysфайл у каталог .ssh (це замінить будь-який існуючий authorized_keysфайл; врахуйте це).

    Якщо файл існує, просто додайте вміст цього файлу до наявного файлу.

    Запустіть команди, щоб встановити дозволи:

    sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys
    

Тепер ви зможете запустити ssh у віддалену машину, не вводячи облікові дані кожного разу.

Подальше читання:

  1. Генерування та завантаження ключів SSH під Windows

  2. Аутентифікація без пароля за допомогою ключа OpenSSH, сертифікатів .pem та .pub


Якщо ваш домашній каталог зашифрований, зробіть це: askubuntu.com/questions/439184/…
devprashant

2
хоча ваша відповідь не дуже стосується питання, я голосую за це через ваш ентузіазм.
Труонг Нгуен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.