Как добавить пароль в закрытый ключ OpenSSH, созданный без пароля?

213

Я сгенерировал закрытый ключ OpenSSH, используя puttygen (и экспортировал его в формат OpenSSH). Как я могу поставить пароль на этот существующий ключ (я знаю, как создать новый ключ с паролем)?

Conrad
источник
13
Если вы видите этот комментарий, отметьте один из ответов как принятый или напишите комментарий о том, что они пропустили. Спасибо!
Бенджамин Аткин
1
Добавить - это то же самое, что изменить или удалить: stackoverflow.com/questions/112396/… , то же самое можно изменить: serverfault.com/questions/50775/…
Сиро Сантилли 郝海东 郝海东 病 六四 事件 法轮功
Если вы получаете Bad passphraseна id_ed25519ключ , но пароль правильно, то вы, вероятно , с помощью нижнего уровня , ssh-keygenчтобы управлять им.
jww

Ответы:

350

Попробуйте команду ssh-keygen -p -f keyfile

Со страницы руководства ssh-keygen

 -p      Requests changing the passphrase of a private key file instead of
         creating a new private key.  The program will prompt for the file
         containing the private key, for the old passphrase, and twice for
         the new passphrase.

 -f filename
         Specifies the filename of the key file.

Пример:

ssh-keygen -p -f ~/.ssh/id_rsa
sigjuice
источник
5
Для тех, кто хочет знать, что такое -f: он определяет входной файл.
Neikos
4
//, @sigjuice, не могли бы вы опубликовать пример, как $ ssh-keygen -p -f /Users/sigjuice/.ssh/id_rsa? Это может помочь людям, которые не знают, как определить разницу между открытым и закрытым ключами, и помочь им быстрее промокнуть.
Натан Басанезе
По какой-то причине в MacOS 10.14 это не форматирует файл с Proc-Type: 4,ENCRYPTEDзаголовком, что несовместимо с некоторыми приложениями, проверяющими парольную фразу. Попробовав несколько способов заставить его работать, самый простой способ обойти это - просто сделать то же самое в контейнере Docker с Ubuntu, а затем скопировать ключ обратно на мой Mac.
ryanbrainard
38

Используйте параметр -p для ssh-keygen. Это позволяет вам менять пароль, а не генерировать новый ключ.

Измените пароль, как показывает sigjuice:

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

Необходимый пароль будет новым паролем. (Предполагается, что вы добавили открытый ключ ~/.ssh/id_rsa.pubв свои файлы author_keys.) Протестируйте с помощью ssh:

ssh -i ~/.ssh/id_rsa localhost

Вы можете иметь несколько ключей с разными именами для разных целей.

BillThor
источник
//, не могли бы вы показать пример, и как проверить, что опция работает, @BillThor?
Натан Басанезе
Я не понимаю. Фраза-пароль установлена, я вижу, когда я пытаюсь изменить это снова. Но когда я пытаюсь войти на удаленный сервер, он не запрашивает этот пароль, почему?
Лука
1
Все хорошо. Он спрашивает один раз за сеанс :) Не знал этого.
Лука
Значит ли это, что вы должны выйти и снова войти? Закрытие окна терминала и его повторное открытие не работает для меня.
Саймон Х
Вы можете напечатать, ssh-add -Dчтобы удалить вашу кэшированную личность. Затем попробуйте подключиться снова, и он попросит вас ввести пароль. Используйте ssh-add -lдля просмотра списка ваших кэшированных идентификаторов.
Скотт Неддерман
3

Вы также можете использовать openssl:

openssl rsa -aes256 -in ~/.ssh/your_key -out ~/.ssh/your_key.enc
mv ~/.ssh/your_key.enc ~/.ssh/your_key
chmod 600 ~/.ssh/your_key

см .: https://security.stackexchange.com/a/59164/194668

sharez
источник
Я думаю, что я выберу путь ssh-keygen ;)
Майкл П. Базос
Спасибо за предоставление альтернативы openssl для выполнения задачи.
Наджиб Мами