2009-12-28 12:08:48 +0000 2009-12-28 12:08:48 +0000
143
143

Jak używać Mac OS X Keychain z kluczami SSH?

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

Mam kilka kluczy RSA, które wygenerowałem, przechowywanych w moim katalogu ~/.ssh dla dostępu do różnych serwerów. Nie mam ustawionych haseł na tych kluczach. Obecnie, aby zalogować się do tych serwerów używam następujących komend w Terminalu:

eval `ssh-agent` ssh-add ~/.ssh/some\_key\_rsa ssh user@server

(napisałem kilka funkcji Bash, aby to ułatwić)

Czy istnieje lepszy sposób na zrobienie tego za pomocą Keychain?

Odpowiedzi (9)

255
255
255
2011-04-11 19:58:42 +0000

Od wersji Leopard systemu OS X ssh-agent jest ściślej zintegrowany z Keychain. Możliwe jest bezpieczne przechowywanie haseł wszystkich kluczy SSH w Keychain, z którego ssh-agent odczyta je przy starcie systemu. Wniosek jest taki, że jest to proste, aby zabezpieczyć swoje klucze za pomocą haseł, ale nigdy nie trzeba wpisywać hasła, aby ich użyć! Oto jak:

Dodaj frazę hasła do każdego klucza ssh do keychain: (opcja -k ładuje tylko zwykłe klucze prywatne, pomija certyfikaty)

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

(zauważ, że to duże K)

Przy każdym ponownym uruchomieniu Maca wszystkie klucze SSH w Twoim keychainie zostaną automatycznie załadowane. Powinieneś być w stanie zobaczyć te klucze w aplikacji Keychain Access, jak również z linii poleceń poprzez:

ssh-add -l
82
82
82
2016-12-12 18:17:44 +0000

Od macOS Sierra, ssh-agent nie ładuje już automatycznie wcześniej załadowanych kluczy ssh, gdy logujesz się na swoje konto. Jest to celowe ze strony Apple, chcieli ponownie dostosować się do głównego nurtu implementacji OpenSSH. [1]


Jak wyjaśniono tutaj , jest to zalecana metoda od macOS 10.12.2:

  1. Dodaj następujące linie do swojego pliku ~/.ssh/config:

  2. Każdy klucz dodany do ssh-agent za pomocą polecenia ssh-add /path/to/your/private/key/id_rsa zostanie automatycznie dodany do keychain i powinien być automatycznie ładowany po ponownym uruchomieniu.


Następujące są przestarzałe (zachowane dla odniesienia).

Aby powrócić do poprzedniego zachowania, chciałbyś uruchomić komendę ssh-add -A (która automatycznie załaduje wszystkie klucze ssh, które mają pass-phrases w twoim keychain) podczas logowania. Aby to zrobić, wykonaj następujące kroki:

  1. Najpierw dodaj wszystkie klucze, które chcesz auto-loadować do ssh-agent za pomocą polecenia ssh-add -K /absolute/path/to/your/private/key/id_rsa. Argument -K zapewnia, że hasło klucza zostanie dodane do łańcucha kluczy systemu macOS. Upewnij się, że używasz bezwzględnej ścieżki do klucza. Użycie ścieżki względnej spowoduje, że automatycznie uruchamiany skrypt nie znajdzie Twojego klucza.

  2. Upewnij się, że wszystkie Twoje klucze są wyświetlane jako dodane po wpisaniu ssh-add -A.

  3. Utwórz plik o nazwie com.yourusername.ssh-add.plist w ~/Library/LaunchAgents/ z poniższą zawartością. Pliki Plist, takie jak ten, są używane przez launchd do uruchamiania skryptów po zalogowaniu. [2] [3]

  4. Powiedz launchd, aby załadował plik plist, który właśnie utworzyłeś, wykonując: launchctl load ~/Library/LaunchAgents/com.yourusername.ssh-add.plist.

I powinieneś być gotowy.

34
34
34
2017-01-05 18:53:54 +0000

Istnieje prostszy sposób niż Odpowiedź Ricardo , aby zachować hasło między sesjami / restartami komputera Mac z systemem 10.12 Sierra.

  1. ssh-add -K ~/.ssh/id_rsa Uwaga: zmień ścieżkę do miejsca, w którym znajduje się Twój klucz id_rsa.
  2. ssh-add -A
  3. Utwórz (lub edytuj, jeśli istnieje) następujący plik ~/.ssh/config:

Apple celowo zmienił zachowanie dla ssh-agent w macOS 10.12 Sierra, aby nie ładować już automatycznie poprzednich kluczy SSH, jak zauważono w tym OpenRadar , dyskusja na Twitterze , i Uwaga techniczna od Apple . Powyższe rozwiązanie będzie naśladowało stare zachowanie El Capitan i zapamięta Twoje hasło.

17
17
17
2009-12-28 17:37:32 +0000

Aby to zadziałało, zmienna środowiskowa $SSH_AUTH_SOCK powinna być wskazana na /tmp/launch-xxxxxx/Listeners. Powinno to być robione automatycznie podczas logowania. Listener na tym gnieździe posługuje się protokołem ssh-agent.

Twoje skrypty basha uruchamiają Twojego własnego agenta ssh (pisanego ssh-agent, nie ssh) i nadpisują istniejącego ssh-agent, który jest ustawiany dla Ciebie podczas logowania.

Ponadto, całym punktem keychain jest przechowywanie haseł do twoich kluczy ssh, ale mówisz, że nie masz ustawionych haseł na tych kluczach, więc nie jestem pewien, czego oczekujesz od integracji z keychain.

Na koniec, kiedy pierwszy raz się zalogujesz, prawdopodobnie nie zobaczysz procesu ssh-agent. Proces ten zostanie uruchomiony automatycznie przez launch services za pierwszym razem, gdy coś spróbuje odczytać gniazdo w /tmp.

10
10
10
2011-04-28 13:28:40 +0000

Uwaga: dla macOS Sierra, proszę odnieść się do nowszej odpowiedź przez ChrisJF .

[Odpowiedź Jeffa McCarrella][2] jest poprawna, z wyjątkiem tego, że polecenie dodawania frazy przejścia zawiera myślnik zamiast myślnika, tj. –K zamiast -K, co powoduje komunikat o efekcie –K: No such file or directory. Powinien on brzmieć:

ssh-add -K [path/to/private SSH key]
6
6
6
2013-10-14 12:29:41 +0000

Miałem podobny problem podczas próby zalogowania się przy użyciu klienta ssh cert. W tym konkretnym przypadku chodziło o dostęp do repozytorium git. Sytuacja wyglądała następująco:

  • Klucz został zapisany w ~/.ssh/
  • Klucz prywatny posiada passphrase.
  • Fraza hasła jest przechowywana w keychainie logowania do OS X. ~/Library/Keychains/login.keychain
  • Połączenie wyglądało następująco: mój mac -> zdalny mac -> serwer git/ssh
  • Mac OS X 10.8.5

Kiedy połączyłem się ze zdalnym maciem za pomocą zdalnego pulpitu, nie miałem problemu. Jednak gdy łączyłem się przez SSH do zdalnego maca, byłem pytany o hasło ssh za każdym razem. Poniższe kroki rozwiązały ten problem.

  1. security unlock-keychain Fraza hasła jest przechowywana w łańcuchu kluczy logowania. To odblokowuje go i umożliwia ssh-agentowi dostęp do niego.
  2. evalssh-agent -s`` Uruchamia ssh-agenta do użycia w powłoce. Uzyska on frazę hasła z łańcucha kluczy i użyje jej do odblokowania prywatnego klucza ssh.
  3. Nawiąż połączenie ssh/git i wykonaj moją pracę.
  4. evalssh-agent -k`` Zabij działającego ssh-agenta.
  5. security lock-keychain Zablokuj ponownie keychain.
6
6
6
2009-12-28 12:55:13 +0000

Podejrzewam, że nie używasz domyślnej komendy ssh. Czy masz ssh zainstalowane przez porty? Spróbuj which ssh, aby sprawdzić, której komendy ssh używasz.

Zazwyczaj powinno wyświetlić się okno dialogowe z prośbą o podanie hasła, jeśli nie jest ono jeszcze zapisane w twoim keychainie.

4
4
4
2014-03-26 09:45:49 +0000

Zobacz także:

security import priv_key.p12 -k ~/Library/Keychains/login.keychain
security import pub_key.pem -k ~/Library/Keychains/login.keychain

… dodanie tej notatki, ponieważ zażądano więcej szczegółów: polecenie “security” jest zdolne do importowania kluczy (i innych rzeczy) bezpośrednio do Keychains. Fajną rzeczą jest to, że w przeciwieństwie do ssh-add, jesteś w stanie określić keychain. Umożliwia to importowanie bezpośrednio do systemowego Keychaina (“man security” aby dowiedzieć się jak)

1
1
1
2017-01-26 10:39:16 +0000

Najlepsze i zamierzone przez Apple rozwiązanie (od macOS 10.12.2) jest opisane tutaj

Więc po prostu wykonaj następujące czynności:

echo “UseKeychain yes” ~/.ssh/config.