Jak usunąć hasło dla klucza SSH bez konieczności tworzenia nowego klucza?

1033

Ustawiam hasło podczas tworzenia nowego klucza SSH na moim laptopie. Ale, jak sobie teraz uświadamiam, jest to dość bolesne, gdy próbujesz zatwierdzić ( Git i SVN ) w odległej lokalizacji przez SSH wiele razy w ciągu godziny.

Jednym ze sposobów, które mogę wymyślić, jest usunięcie moich kluczy SSH i utworzenie nowych. Czy istnieje sposób na usunięcie hasła przy jednoczesnym zachowaniu tych samych kluczy?

btbytes
źródło
9
Myślę, że ścisła odpowiedź jest właściwie odpowiedzią Torsten Marek. Sztuczka ssh-agent może być tym, czego szukasz, ale jest to odpowiedź na inne pytanie.
opóźnienie
1
Hasło to nie tylko klucz do odblokowania prywatnego klucza SSH, ale także część mechanizmu szyfrowania. Jedna część to Twój klucz SSH, druga - hasło wprowadzone ręcznie. Tylko jeśli obie części są poprawne, klucz złożony wygenerowany z nich w locie będzie ważny. Zatem inne hasło odpowiada innemu kluczowi SSH (a brak hasła to szczególny przypadek „innego hasła”).
Paul,
97
Zamykanie takich pytań jest jak debata na temat skutków ubocznych w językach programowania, które powinny być dozwolone, ponieważ są „czyste” lub nie. Puryści zawsze wpadają w amok, a inni nie przejmują się tym, ponieważ jest to przydatna funkcja i ułatwia życie. ssh jest potrzebne, nawet jeśli nie jest ściśle związane z programowaniem ... nie zamykaj takich pytań. : |
sjas

Odpowiedzi:

1929

Krótka odpowiedź:

$ ssh-keygen -p

Spowoduje to wyświetlenie monitu o podanie lokalizacji pliku klucza, starego hasła i nowego hasła (które można pozostawić puste, aby nie było hasła).


Jeśli chcesz zrobić to wszystko w jednym wierszu bez monitów:

$ ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]

Ważne: Uwaga : podczas wykonywania poleceń będą one zazwyczaj rejestrowane w ~/.bash_historypliku (lub podobnym) w postaci zwykłego tekstu, w tym wszystkich dostarczonych argumentów (w tym przypadku haseł). Dlatego zaleca się skorzystanie z pierwszej opcji, chyba że masz konkretny powód, aby zrobić inaczej.

Zauważ jednak, że nadal możesz używać -f keyfilebez konieczności określania -Pani -N, i że plik klucza jest domyślnie ustawiony ~/.ssh/id_rsa, więc w wielu przypadkach nie jest nawet potrzebny.

Możesz rozważyć użycie ssh-agent, który może buforować hasło przez pewien czas. Najnowsze wersje gpg-agent obsługują również protokół używany przez ssh-agent.

Torsten Marek
źródło
464
Mówiąc wprost: możesz po prostu uruchomić ssh-keygen -pw terminalu. Następnie wyświetli monit o podanie pliku klucza (domyślnie dla mnie prawidłowy plik ~/.ssh/id_rsa), starego hasła (wprowadź to, co już masz) i nowego hasła (nic nie wprowadzaj).
Henrik N
34
Dawny. :ssh-keygen -p -P oldpassphrase -N "" -f ~/.ssh/id_rsa
Fedir RYKHTIK
24
-1, aby użytkownik wpisał swoje hasło w terminalu i udostępnił je za pośrednictwem ~/.bash_history. Lepiej wpisać:$ cd ~/.ssh && ssh-keygen -f id_dsa -p
betoharres
5
Powinieneś zauważyć, że jeśli wpiszesz polecenie do powłoki, rozpocznie się (biała) spacja, to polecenie nie zostanie zapisane w ~/.bash_hstoryIe. użyj `ssh-keygen -p -P oldpassphrase -N" "-f ~ / .ssh / id_rsa` i wszystko jest w porządku (chyba że masz tam inny keylogger). Możesz również pozbyć się tego zapisu z historii .
Ogromny
14
Może warto dodać wiersz informujący, że spowoduje to zastąpienie istniejącego pliku i nie będzie monitował o nową lokalizację.
Lars Francke,
46

$ ssh-keygen -p pracował dla mnie

Otwarty git bash. Wklejony:$ ssh-keygen -p

Naciśnij Enter, aby uzyskać domyślną lokalizację.

Wpisz stare hasło

Wprowadź nowe hasło - BLANK

Potwierdź nowe hasło - PUSTE

BOOM ból zniknął po wprowadzeniu hasła do git push.

Dzięki!

Karan
źródło
Jeśli po trafieniu wejść do $ ssh-keygen -pi klucz nie jest w powiedzenia domyślnej lokalizacji (/Users/yourname/.ssh/id_rsa), można odpowiedzieć poprzez umieszczenie /Users/yourname/.ssh/yourkeyna monit
Chigozie Orunta
37

Możesz dodać następujące elementy do swojego .bash_profile (lub odpowiednika), który uruchamia ssh-agent przy logowaniu.

if [ -f ~/.agent.env ] ; then
    . ~/.agent.env > /dev/null
    if ! kill -0 $SSH_AGENT_PID > /dev/null 2>&1; then
        echo "Stale agent file found. Spawning new agent… "
        eval `ssh-agent | tee ~/.agent.env`
        ssh-add
    fi 
else
    echo "Starting ssh-agent"
    eval `ssh-agent | tee ~/.agent.env`
    ssh-add
fi

W niektórych dystrybucjach Linuksa (Ubuntu, Debian) możesz użyć:

ssh-copy-id -i ~/.ssh/id_dsa.pub username@host

Spowoduje to skopiowanie wygenerowanego identyfikatora do zdalnego komputera i dodanie go do zdalnego pęku kluczy.

Możesz przeczytać więcej tutaj i tutaj .

mlambie
źródło
7
Czy nowoczesna dystrybucja nie uruchamia ssh-agent po wyjęciu z pudełka?
Troels Arvin,
W niektórych dystrybucjach Linuksa (Ubuntu, Debian) możesz użyć: ssh-copy-id -i ~ / .ssh / id_dsa.pub nazwa użytkownika @ host Zakładając oczywiście, że masz do tego dostęp. I chociaż pochodzi z 2008 roku, może powinien być edytowany w celu odniesienia do id_rsa.pub (tak, mógłbym go edytować, ale nie czuję się komfortowo, robiąc to w cudzych utworach - a esp dotyczy czegoś takiego).
Pryftan
@TroelsArvin Tak. Ale czasami zdarza się, że zostaje zabity (chociaż okoliczności, które napotkałem, nie przychodzą mi na myśl - chyba że X11 ma problem i musisz go ponownie uruchomić ... to może być jedna z takich sytuacji). W takim przypadku musisz go „odtworzyć”.
Pryftan
8

Aby zmienić lub usunąć hasło, często uważam, że najłatwiej jest przekazać tylko flagi pi f, a następnie pozwolić, aby system poprosił mnie o podanie hasła:

ssh-keygen -p -f <name-of-private-key>

Na przykład:

ssh-keygen -p -f id_rsa

Wprowadź puste hasło, jeśli chcesz usunąć hasło.

Przykładowy przebieg usuwania lub zmiany hasła wygląda mniej więcej tak:

ssh-keygen -p -f id_rsa
Enter old passphrase: 
Key has comment 'bcuser@pl1909'
Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.

Podczas dodawania hasła do klucza, który nie ma hasła, przebieg wygląda mniej więcej tak:

ssh-keygen -p -f id_rsa
Key has comment 'charlie@elf-path'
Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.
ccalvert
źródło
3

W systemie Windows można użyć PuttyGen, aby załadować plik klucza prywatnego, usunąć hasło, a następnie zastąpić istniejący plik klucza prywatnego.

Ajit Goel
źródło
2

Na komputerze Mac możesz przechowywać hasło do prywatnego klucza SSH w pęku kluczy, dzięki czemu korzystanie z niego jest przezroczyste. Jeśli jesteś zalogowany, jest on dostępny, gdy się wylogujesz, użytkownik root nie będzie mógł z niego korzystać. Usunięcie hasła jest złym pomysłem, ponieważ każdy, kto ma plik, może go użyć.

ssh-keygen -K

Dodaj to do ~/.ssh/config

UseKeychain yes
bbaassssiiee
źródło