Как получить открытый ключ из закрытого ключа SSH?

444

Закрытый ключ SSH, созданный с помощью, ssh-keygenсодержит часть открытого ключа. Как получить этот открытый ключ из закрытого ключа? Я потерял свой открытый ключ и мне нужно поместить содержимое этого открытого ключа в authorized_keysфайл серверов, и я не хочу создавать новую пару ключей.

Альтернативно сформулировано: как мне создать id_rsa.pubфайл из id_rsaфайла?

Lekensteyn
источник
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 хранится на смарт-карте (и доступ к файлу закрытого ключа невозможен).

Lekensteyn
источник
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.

(Отказ от ответственности)

Недавно я использовал это решение для удаленного входа в новые развернутые образы виртуальных машин на GCE.


Используемые инструменты:

  1. PuTTYgen
  2. WinSCP

Шаги для выполнения:

  1. Создайте пару открытый / закрытый ключ, используя puttygen.
  2. Загрузите открытый ключ на ваш сервер в облаке или в удаленном месте.

Описание (как это сделать):

  1. Сгенерируйте ключ / пару или используйте существующий закрытый ключ:

    Если у вас есть закрытый ключ:

    Откройте puttygen, нажмите кнопку загрузки и выберите файл личного ключа (* .pem).

    Если у вас нет закрытого ключа:

    • Открытый путтиген,
    • Выберите нужный тип ключа SSH2 DSA (вы можете использовать RSA или DSA) в разделе «Параметры» ... и важно, чтобы вы оставили поле пароля незаполненным,
    • Нажмите «Генерировать» и следуйте инструкциям, чтобы сгенерировать (открытый / закрытый) ключ.

    Пример генерации ключей

  2. Создайте новый файл authorized_keys (с помощью Блокнота):

    Скопируйте данные вашего открытого ключа из раздела «Открытый ключ для вставки в OpenSSH файл авторизованного ключа» в генераторе ключей PuTTY и вставьте данные ключа в файл авторизованного ключа.

    Убедитесь, что в этом файле только одна строка текста.

  3. Загрузите ключ на сервер Linux:

    • Откройте WinSCP,
    • Выберите протокол файла SFTP и войдите под своими учетными данными SSH.
    • В случае успеха вы увидите структуру домашнего каталога на вашем удаленном компьютере.

    Загрузите файл author_keys в домашний каталог на удаленном компьютере.

  4. Установите правильные разрешения:

    Сделать .sshкаталог (если он не существует)

    Скопируйте authorized_keysфайл в каталог .ssh (это заменит любой существующий authorized_keysфайл; обратите внимание на это).

    Если файл существует, просто добавьте содержимое этого файла в существующий файл.

    Запустите команды для установки разрешений:

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

Теперь вы сможете подключаться по ssh к удаленной машине, не вводя учетные данные каждый раз.

Дальнейшее чтение:

  1. Генерация и загрузка ключей SSH под Windows

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

devprashant
источник
Если ваш домашний каталог зашифрован, сделайте это: askubuntu.com/questions/439184/…
devprashant
2
хотя ваш ответ на самом деле не имеет отношения к вопросу, я голосую за него из-за вашего энтузиазма.
Чыонг Нгуен