ssh-add nie jest trwały między restartami

150

Dodałem klucz ssh do agenta poprzez:

$ ssh-add ~/.ssh/id_rsa_mac
Identity added: /Users/alex/.ssh/id_rsa_mac (/Users/alex/.ssh/id_rsa_mac)

Po ponownym uruchomieniu agenta nie ma już dodanego tego klucza:

$ ssh-add -l
The agent has no identities.

Dlaczego się to stało?

ア レ ッ ク ス
źródło
Nie mam teraz czasu na pełną odpowiedź, ale gpg-agent w trybie ssh zrobi to, co chcesz. Wypróbuj to zamiast starszego ssh-agent. Jeśli to pomoże, mógłbym spróbować to rozwinąć, kiedy otrzymam czas później.
Vality
@Vality: Wątpię, aby gpg-agent utrzymywał się podczas ponownego uruchamiania.
Pavel Šimerda
@ PavelŠimerda Szyfruje klucze prywatne za pomocą hasła użytkownika, a następnie umieszcza je, $HOME/.gnupg/private-keys-v1.dgdy tylko dodasz je za pomocą ssh-add. To naprawdę jest trwałe. Zakładając, że masz nieulotny katalog domowy.
Vality
@Vality: Czy nie należy tego uważać za problem bezpieczeństwa? Czy nie możesz równie dobrze użyć klucza bez hasła i zrobić to bez potrzeby korzystania z agenta?
Pavel Šimerda
1
@ PavelŠimerda Nie jest to tak naprawdę kwestia bezpieczeństwa, ponieważ klucz jest przechowywany w postaci zaszyfrowanej hasłem użytkownika, nadal musi być wpisane hasło za każdym razem, gdy użytkownik loguje się, aby je odszyfrować. Przechowywanie klucza w postaci niezaszyfrowanej oznacza, że ​​użytkownik z rootem (lub złodziej, który zabrał twój dysk twardy) może ukraść go z twojego katalogu domowego, a gnupg, jeśli go ukradnie, zostanie zaszyfrowany twoim hasłem, a zatem bezużyteczny.
Vality

Odpowiedzi:

174

Dodanie kluczy do agenta jest przejściowe. Trwają tylko tak długo, jak długo agent jest uruchomiony. Jeśli go zabijesz lub uruchomisz ponownie, zostaną utracone, dopóki nie dodasz ich ponownie. Ze strony podręcznika ssh-agent:

ssh-agent to program do przechowywania kluczy prywatnych używanych do uwierzytelniania klucza publicznego (RSA, DSA, ECDSA). Chodzi o to, że ssh-agent jest uruchamiany na początku sesji X lub sesji logowania, a wszystkie inne okna lub programy są uruchamiane jako klienci programu ssh-agent. Dzięki zastosowaniu zmiennych środowiskowych agent może zostać zlokalizowany i automatycznie użyty do uwierzytelnienia podczas logowania do innych komputerów za pomocą ssh (1).

Agent początkowo nie ma żadnych kluczy prywatnych. Klucze są dodawane za pomocą ssh-add (1). Kiedy wykonywane bez argumentów, ssh-add (1) dodaje pliki ~/.ssh/id_rsa, ~/.ssh/id_dsa, ~/.ssh/id_ecdsai ~/.ssh/identity. Jeśli tożsamość ma hasło, ssh-add (1) pyta o hasło na terminalu, jeśli ma jeden lub z małego programu X11, jeśli działa pod X11. Jeśli nie ma żadnego z tych przypadków, uwierzytelnienie zakończy się niepowodzeniem. Następnie wysyła tożsamość do agenta. Agent może przechowywać kilka tożsamości; agent może automatycznie użyć dowolnej z tych tożsamości. ssh-add -lwyświetla tożsamości aktualnie przechowywane przez agenta.

macOS Sierra

Począwszy od macOS Sierra 10.12.2 , Apple dodało opcję konfiguracji UseKeychain dla konfiguracji SSH. Możesz włączyć tę funkcję, dodając UseKeychain yesdo swojego ~/.ssh/config.

Host *
  UseKeychain yes

Brelok OSX

Nie używam OSX, ale znalazłem to pytanie i odpowiedzi na SuperUser zatytułowane: Jak używać pęku kluczy Mac OS X z kluczami SSH? .

Rozumiem, że od czasu Mac OS X Leopard Keychain obsługuje przechowywanie kluczy SSH. Czy ktoś mógłby wyjaśnić, jak ta funkcja powinna działać.

Z tego dźwięku możesz zaimportować klucze SSH do pęku kluczy, używając tego polecenia:

$ ssh-add -K [path/to/private SSH key]

Klucze powinny następnie trwać od rozruchu do rozruchu.

Po każdym ponownym uruchomieniu komputera Mac wszystkie klucze SSH w pęku kluczy zostaną automatycznie załadowane. Powinieneś być w stanie zobaczyć klucze w aplikacji Dostęp do pęku kluczy, a także z wiersza poleceń za pośrednictwem:

  ssh-add -l

Źródło: Super użytkownik - jak używać pęku kluczy Mac OS X z kluczami SSH?

slm
źródło
naprawdę? W systemie Linux nie mam tego problemu. Czy muszę „ssh-add my_key” za każdym razem, gdy ponownie uruchamiam komputer?
ア レ ッ ク ス
2
@Alex Jak wyjaśnia odpowiedź, agent automatycznie dodaje ~/.ssh/id_rsa. Domyślam się, że to jest lokalizacja twojego pliku kluczy na Linuksie. Możliwe też, że nie używasz standardowego agenta klucza ssh. Istnieją inne, takie jak gnome-keyring-daemon, które mogą mieć różne zachowania.
Patrick
ale na Macu ma nazwę „id_rsa_mac”. Jak sprawić, by agent dodał go automatycznie?
ア レ ッ ク ス
@Patrick: Nie jestem pewien, czy klasyczny ssh-agentdodaje automatycznie jakieś klucze. Moim zdaniem to ssh-addodczytuje standardowe lokalizacje lub sshklienta, jeśli nie używasz agenta.
Pavel Šimerda
5
Mały sidenote, jeśli twoje polecenie ssh-add nie rozpoznaje flagi -K, prawdopodobnie używasz wersji ssh-add w wersji Macports ... możesz pominąć wersję macports, podając pełną ścieżkę do wersji ssh-add w OSX jak to:/usr/bin/ssh-add -K /path/to/private/key
ChrisR
20

Jest ssh-agentto usługa sesji, która tymczasowo przechowuje klucze dla użytkownika.

Głównym celem agenta SSH jest zapamiętanie wersji klucza w postaci jawnego tekstu zabezpieczonej za pomocą hasła. Innymi słowy, klucz jest przechowywany na dysku zaszyfrowanym za pomocą hasła, a właściciel klucza używa ssh-addlub jakiegoś narzędzia GUI do dostarczenia hasła i poinstruowania agenta, aby zapamiętał go do momentu zakończenia sesji lub jawnego żądania usunięcia.

Jeśli nie używasz hasła i nie używasz przekazywania agentów (co w większości przypadków jest niepewne), wcale nie potrzebujesz agenta . Każdy klient SSH powinien móc odczytać klucz z dysku, albo ze standardowej lokalizacji, albo z wyraźnie określonych lokalizacji.

Standardowe lokalizacje są wymienione na stronie podręcznika ssh(1):

Domyślna wartość to ~ / .ssh / identity dla protokołu w wersji 1 i ~ / .ssh / id_dsa, ~ / .ssh / id_ecdsa, ~ / .ssh / id_ed25519 i ~ / .ssh / id_rsa dla protokołu w wersji 2.

Korzystając z niestandardowych lokalizacji, możesz użyć -iprzełącznika sshopisanego na tej samej stronie podręcznika lub odpowiedniej opcji w używanym kliencie SSH.

Pavel Šimerda
źródło
4
+1 za zalecenie niestosowaniassh-agent
dg99
7

W Sierra :

Użyj UseKeychain . (Nie próbowałem tego, ale brzmi to jak najbardziej poprawne rozwiązanie).

Lub

ssh-add -K /your/key
echo ssh-add -A | cat >> ~/.bash_profile

Lub utwórz plik plist zamiast dołączać do ~/.bash_profile.

Oświadczenie: jak zauważyli inni, nie wiem, jak bezpieczne jest przechowywanie haseł ssh w pęku kluczy.

David Winiecki
źródło
Wypróbowałem wszystkie powyższe metody, ale tylko ta działa. Dziękuję Ci!
Duannx