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


213

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


13
Якщо ви бачите цей коментар, будь-ласка, позначте одну з відповідей як прийняту або напишіть коментар із зазначенням того, що вони пропустили. Дякую!
Бенджамін Аткін

1
Додати те саме, що змінити або видалити: stackoverflow.com/questions/112396/… , можливо те ж саме для зміни: serverfault.com/questions/50775/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Якщо ви потрапили Bad passphraseна id_ed25519ключ, але пароль правильний, ви, ймовірно, використовуєте нижній рівень ssh-keygenдля управління ним.
jww

Відповіді:


350

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

Із сторінки ssh-keygen man

 -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

5
Для тих, хто хоче знати, що таке -f: Він визначає вхідний файл.
Нейкос

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до файлів дозволених ключів .) Тест за допомогою ssh:

ssh -i ~/.ssh/id_rsa localhost

Ви можете мати кілька клавіш з різними іменами для різних цілей.


//, Чи покажіть, будь ласка, приклад, і як перевірити, чи параметр спрацював, @BillThor?
Натан Басанес

Я не розумію. Встановлено пароль, я бачу, коли я намагаюся його знову змінити. Але коли я намагаюся увійти на віддалений сервер, він не запитує цей пароль пароля, чому?
Лука

1
Це добре. Він запитує один раз на сеанс :) Не знав цього.
Лука

Це означає, що вам доведеться вийти та знову ввійти? Закрити вікно терміналу та повторно його відкрити для мене не працює.
Simon H

Ви можете ввести, 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


Я думаю, я піду ssh-keygen шляхом;)
Майкл П. Базос

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