Jak dodać hasło do klucza prywatnego OpenSSH wygenerowanego bez hasła?

213

Wygenerowałem klucz prywatny OpenSSH za pomocą puttygen (i wyeksportowałem go w formacie OpenSSH). Jak mogę wprowadzić hasło do tego istniejącego klucza (wiem, jak wygenerować nowy klucz za pomocą hasła)?

Conrad
źródło
13
Jeśli zobaczysz ten komentarz, zaznacz jedną z odpowiedzi jako zaakceptowanych lub napisz komentarz z informacją o tym, co przegapili. Dzięki!
Benjamin Atkin
1
Dodawanie jest takie samo jak zmiana lub usunięcie: stackoverflow.com/questions/112396/… , możliwe to samo dla zmiany: serverfault.com/questions/50775
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
Jeśli masz Bad passphrasena id_ed25519klucz, ale hasło jest poprawne, to prawdopodobnie przy użyciu niższego poziomu ssh-keygendo zarządzania nim.
jww

Odpowiedzi:

350

Wypróbuj polecenie ssh-keygen -p -f keyfile

Ze strony podręcznika 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.

Przykład:

ssh-keygen -p -f ~/.ssh/id_rsa
sigjuice
źródło
5
Dla tych, którzy chcą wiedzieć, co to jest -f: określa plik wejściowy.
Neikos,
4
//, @sigjuice, czy mógłbyś zamieścić przykład, na przykład $ ssh-keygen -p -f /Users/sigjuice/.ssh/id_rsa? Może to pomóc osobom, które nie wiedzą, jak odróżnić klucz publiczny od prywatnego, i pomóc im szybciej zmoczyć stopy.
Nathan Basanese
Z jakiegoś powodu w systemie MacOS 10.14 nie formatuje pliku z Proc-Type: 4,ENCRYPTEDnagłówkiem, co jest niezgodne z niektórymi aplikacjami sprawdzającymi hasło. Po wypróbowaniu kilku sposobów na jego uruchomienie, najłatwiejszym sposobem obejścia tego było po prostu zrobienie tego samego w kontenerze Docker z systemem Ubuntu, a następnie skopiowanie klucza z powrotem na komputer Mac.
ryanbrainard
38

Użyj opcji -p, aby ssh-keygen. Umożliwia to zmianę hasła zamiast generowania nowego klucza.

Zmień hasło, jak pokazuje sigjuice:

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

Wymagane hasło będzie nowym hasłem. (Zakłada się, że dodałeś klucz publiczny ~/.ssh/id_rsa.pubdo plików autoryzowanych_kluczy.) Przetestuj za pomocą ssh:

ssh -i ~/.ssh/id_rsa localhost

Możesz mieć wiele kluczy o różnych nazwach do różnych zastosowań.

BillThor
źródło
//, Czy możesz pokazać przykład i jak sprawdzić, czy opcja zadziałała, @BillThor?
Nathan Basanese
Nie rozumiem. Hasło jest ustawione, widzę, gdy próbuję go zmienić ponownie. Ale kiedy próbuję zalogować się na zdalnym serwerze, nie pyta o hasło, dlaczego?
Luka,
1
W porządku. Pyta raz na sesję :) Nie wiedziałem o tym.
Luka
Czy to oznacza, że ​​musisz się wylogować i zalogować ponownie? Zamykanie okna terminala i jego ponowne otwieranie nie działa dla mnie.
Simon H
Możesz wpisać, ssh-add -Daby usunąć swoją pamięć podręczną. Następnie spróbuj połączyć się ponownie, a poprosi o podanie hasła. Użyj, ssh-add -laby zobaczyć listę twoich tożsamości w pamięci podręcznej.
Scott Nedderman
3

Możesz także użyć 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

patrz: https://security.stackexchange.com/a/59164/194668

sharez
źródło
Myślę, że pójdę drogą ssh-keygen ;)
Michael P. Bazos
Dziękujemy za udostępnienie openssl alternatywy do wykonania zadania.
Nadjib Mami