macOS ciągle pyta o moje hasło ssh od czasu aktualizacji do Sierra

588

Kiedyś pamiętał hasło, ale teraz pyta mnie za każdym razem.

Przeczytałem, że muszę ponownie wygenerować klucz publiczny za pomocą tego polecenia, co zrobiłem:

ssh-keygen -y -f id_rsa > id_rsa.pub

ale nic nie naprawiło.

Jak sprawić, by system macOS ponownie zapamiętał moje hasło?

erwan
źródło
Występują podobne zachowania: wcześniej pojawiło się okno dialogowe kluczy z prośbą o podanie hasła, teraz pojawia się zwykły monit konsoli SSH. Pewnej rejestracji programu pomocniczego prawdopodobnie nie ma.
Daniel B
1
Minęły lata, odkąd wygenerowałem moją id_rsa i nigdy nie użyłem hasła i używałem go do ssh na wielu serwerach. Czy naprawdę mam na nim hasło, czy tylko Sierra uważa, że ​​powinienem? Zauważ, że $ cat ~ / .ssh / id_rsa | głowa -2 ----- ROZPOCZNIJ KLUCZ PRYWATNY ----- Proc-Type: 4, SZYFROWANY
Joe Murray
Jeśli używasz Pretzo i żadna z tych odpowiedzi nie rozwiązała Twojego problemu: Upewnij się, że nie masz sshwłączonego modułu zpretzorc. W systemie macOS i tak nie jest to konieczne, a jeśli jest włączone, poprosi o podanie hasła nawet po dodaniu UseKeychain.
Jimothy
1
spróbuj ssh -v ...sprawdzić, czy ma jakieś przydatne informacje debugowania ...
rogerdpack

Odpowiedzi:

1129

W najnowszej wersji systemu macOS (10.12.2) można to łatwo naprawić. Po prostu edytuj ~/.ssh/configi włącz UseKeychainopcję:

Host *
    UseKeychain yes

Nie trzeba zmieniać niczego innego. Teraz wszystko działa tak, jak kiedyś przed najnowszymi aktualizacjami. Nie musisz dodawać kluczy do ssh-agent.


Edycja: Może być konieczne jednokrotne wprowadzenie hasła. Jeśli nie wiesz, postępuj zgodnie z tymi instrukcjami, aby je ujawnić.

Jukka Suomela
źródło
24
To absolutnie działało dla mnie. Wszystko poniżej wydaje się bardziej skomplikowane niż ta poprawka.
Br.Bill
82
Uwaga: Host *blok powinien (prawie) zawsze znajdować się na dole ~/.ssh/configpliku. Kiedy sshszuka ustawień, wykorzystuje pierwszą znalezioną wartość. Tak więc, umieszczając blok symboli wieloznacznych na końcu, działa on jako zestaw wartości domyślnych; możesz zastąpić ustawienia określonych hostów, określając je wcześniej w pliku.
Molomby,
6
To również działało dla mnie, ale musiałem raz poprawnie wpisać hasło. Istnieje inna odpowiedź, która opisuje sposób wyświetlania hasła, jeśli go nie pamiętasz.
FGreg
26
Jeśli plik konfiguracyjny nie istnieje, utworzenie go i dodanie go również będzie działać.
wynshaft
6
Nie potrzebujesz Host *nagłówka. Wystarczy dołączyć pojedynczą linię UseKeychain yesu góry, .ssh/configjeśli chcesz, aby dotyczyła wszystkich hostów.
sj26
185

Miałem ten sam problem. Brelok MacOS Sierra wciąż pyta o hasło. Twój identyfikator powinien być zaszyfrowany za pomocą hasła dla bezpieczeństwa. Następnie spróbuj dodać go do pęku kluczyssh-add -K ~/.ssh/id_rsa

Jeśli klucz znajduje się w innym folderze, ~/.sshzastąp właściwy folder.

Keychain zna teraz twój klucz ssh i, mam nadzieję, wszystkie działa teraz (moje zrobiły)

Lars G.
źródło
25
Działa to, ale wydaje się, że nie występuje po ponownym uruchomieniu komputera. Czy ktoś jeszcze ma ten sam problem?
joshua.paling
1
Tak, ten sam problem tutaj. @ joshua.paling
kingkool68
18
@ joshua.paling, kingkool68 - Apple usunęło możliwość zapamiętywania kluczy SSH podczas ponownego uruchamiania, aby zachować zgodność z głównym nurtem OpenSSH. Zobacz to pytanie, aby dowiedzieć
Evan Pon
@EvanPon Ale to nie zadziała z szyfrowanymi kluczami, prawda?
Konrad Rudolph
2
@KonradRudolph to działa dla mnie. Wywołanie ssh-addz tą -Aopcją będzie szukać w pęku kluczy MacOS wszelkich haseł dla danych tożsamości. Wierzę, że pojawi się monit, jeśli hasła nie ma w pęku kluczy.
Evan Pon
73

To naprawiło mój podobny problem:

/usr/bin/ssh-add -K

Przechowuje hasła w twoim pęku kluczy.

Aktualizacja (dzięki @EasyCo): Działa, ale nie utrzymuje się między restartami. @ rozwiązanie Jukka-suomela na tej stronie nie działa w poprzek uruchomieniu. Możesz znaleźć tę odpowiedź tutaj:

https://superuser.com/a/1158050/234685

krytyk
źródło
3
To jedyna rzecz, która działa.
cryptic0
5
Podczas korzystania z tego rozwiązania nie musiałem tworzyć .ssh / .config.
Shai
To zadziałało dla mnie. Nie trzeba edytować pliku hosta. Jestem na Sierra.
cchiera
To działało dla mnie w systemie Mac OS Sierra.
Dayron Gallardo,
2
Jak wspomniano wcześniej, działa to, ale nie utrzymuje się między restartami. Rozwiązanie @ jukka-suomela działa podczas ponownego uruchamiania.
EasyCo,
40

Musiałem tylko raz wprowadzić poprawne hasło i zaczęło działać. Problem polegał na tym, że nie pamiętałem mojego oryginalnego hasła SSH, ale odzyskałem je, wykonując następujące kroki z Github:

  • W Finderze wyszukaj aplikację Dostęp do pęku kluczy.
  • W Dostęp do pęku kluczy wyszukaj SSH.
  • Kliknij dwukrotnie wpis swojego klucza SSH, aby otworzyć nowe okno dialogowe.
  • Okno dialogowe dostępu do pęku kluczy W lewym dolnym rogu wybierz Pokaż hasło.
  • Zostaniesz poproszony o podanie hasła administracyjnego. Wpisz go w oknie dialogowym „Dostęp do pęku kluczy”.
  • Twoje hasło zostanie ujawnione.
Olli Jaakkola
źródło
2
Nie działa Terminal wciąż mówi „złe hasło”
Jayden Lawson
18

Żadne z powyższych rozwiązań nie działało po zainstalowaniu Sierra nad El Capitan na nowym MacBooku Pro. Sierra z założenia nie zapisuje kluczy SSH w pęku kluczy.

Dwa rozwiązania działały dla mnie. Jednym z nich jest dodanie polecenia ssh-add -A &> /dev/nulldo ~ / .bash_profile. Za każdym razem, gdy otwierasz terminal, polecenie to zostanie wykonane ( &> /dev/nullczęść wysyła wynik polecenia do pliku / dev / null).

Bardziej skomplikowanym, ale nieco mniej skomplikowanym rozwiązaniem jest utworzenie listy z poleceniem, które jest uruchamiane przy każdym uruchomieniu systemu operacyjnego, zgodnie z sugestią Zapisywanie kluczy SSH w pęku kluczy macOS Sierra . Wymaga to użycia Xcode do utworzenia pliku.

Hank Snow
źródło
To wydaje się być oficjalną odpowiedzią Apple'a - patrz openradar.appspot.com/27348363
Nick Maynard
Dla mnie najlepsze rozwiązanie do tej pory. Używam Mac OSX Sierra (10.12.2).
zyc
15

Jedną z poprawek jest dodanie następujących rzeczy do pliku ~ / .ssh / config:

Host *
   AddKeysToAgent yes
   IdentityFile ~/.ssh/id_rsa
   UseKeychain yes

Zaczerpnięte z: https://www.reddit.com/r/osx/comments/52zn5r/difficulties_with_sshagent_in_macos_sierra/ Zobacz także: https://apple.stackexchange.com/a/264974/3810

ThomasW
źródło
Jak dotąd, w żadnej z odpowiedzi, nikt nie wspomniał o Bad configuration option: usekeychainbłędzie, który otrzymuję przy użyciu UseKeychain (jednak jest to wielkie litery). Ale był w stanie dostać pracy poprzez usunięcie tylko tej linii i pozostawiając AddKeysToAgent i IdentityFile (trzeba jeszcze wprowadzić hasło po raz pierwszy). Dotyczy to systemu macOS Sierra 10.12.6.
William Turrell,
działa to dobrze, gdy jestem w terminalu i używam polecenia ssh, ale inne aplikacje, takie jak WebStorm, które używają własnego terminala, nie biorą tej konfiguracji, dopóki nie użyję polecenia ssh w zwykłym terminalu. to działa wszędzie, jakieś sugestie?
Santiago arizti
@WilliamTurrell Jeśli nadal tak się dzieje, wpisz, which sshaby upewnić się, że używasz, /usr/bin/ssha nie wersji Fink lub MacPorts, co byłoby pod czymś /usr/local/bin/sshlub/opt/local/bin/ssh
Stefan Lasiewski
7

Dziś rano miałem taki sam problem jak ty po aktualizacji do Sierra. W moim przypadku id_rsaplik został zaszyfrowany i po odszyfrowaniu działał jak urok.

  1. Sprawdź, czy id_rsaplik jest zaszyfrowany za pomocą następującego polecenia:cat ~/.ssh/id_rsa | head -2
  2. Jeśli druga linia mówi Proc-Type: 4,ENCRYPTED, że jest zaszyfrowana i możesz spróbować ją odszyfrować
  3. Ważne: wykonaj kopię zapasową oryginalnego id_rsapliku! Użyj poleceniacp ~/.ssh/id_rsa ~/.ssh/id_rsa.bak
  4. Odszyfruj swój klucz prywatny za pomocą openssl rsa -in ~/.ssh/id_rsa -out ~/.ssh/id_rsa.decrypted
  5. Usuń oryginalny klucz ( rm ~/.ssh/id_rsa) i zastąp go odszyfrowanym:mv ~/.ssh/id_rsa.decrypted ~/.ssh/id_rsa

Po wykonaniu tych kroków powinieneś być w stanie ponownie użyć ssh.

Martijn Pieters
źródło
4
Chociaż jest to pewnego rodzaju obejście, nie sądzę, że tak naprawdę rozwiązuje problem PO.
Daniel B
To działa dla mnie. @DanielB, jaki jest problem z robieniem tego?
Dag Høidahl
7
@ DagHøidahl Klucz nie będzie już szyfrowany. Może zostać skradziony z regularnymi prawami użytkownika, więc szyfrowanie jest POWAŻNE.
Daniel B
6
To usuwa hasło z klucza, dlatego działa on w przypadku problemu PO. Ale odradzam to. Hasło to wszystko, co powstrzymuje ludzi przed użyciem twojego klucza, gdy zostanie skradziony. Ponieważ Twój klucz prawdopodobnie zapewni dostęp do wielu systemów, nie chcesz go osłabiać.
Martijn Heemels
5

Próbowałem tutaj wielu odpowiedzi, ale nadal miałem problemy ze zdalnym przekazywaniem kluczy (na przykład podczas używania capistrano). Aby to rozwiązać, przeczytałem notatkę techniczną z firmy Apple i utworzyłem ten plik konfiguracyjny. Nigdy więcej pytania o moje hasło!

https://developer.apple.com/library/content/technotes/tn2449/_index.html

Host *  
   IdentityFile ~/.ssh/id_rsa  
   IgnoreUnknown UseKeychain  
   UseKeychain yes  
   AddKeysToAgent yes
Geek Goddess
źródło
4

Miałem ten problem również podczas próby wdrożenia kodu za pomocą Capistrano . Bardzo frustrujące. Oto dwie znane mi metody radzenia sobie z tym problemem.

Metoda 1: Dodaj wszystkie znane klucze do agenta SSH.

Jednym z rozwiązań, które znalazłem, jest uruchomienie ssh-addz -Aopcją - która dodaje wszystkie znane tożsamości do agenta SSH przy użyciu dowolnych haseł przechowywanych w pęku kluczy - w ten sposób:

ssh-add -A

Teraz to działa, ale nie będzie trwało po ponownym uruchomieniu komputera. Jeśli więc nie chcesz się już o to martwić, po prostu otwórz ~/.bash_profileplik użytkownika w następujący sposób:

nano ~/.bash_profile

I dodaj tę linię na dole:

ssh-add -A 2>/dev/null;

Teraz, gdy otworzysz nowe okno Terminalu, wszystko powinno być dobrze!

Metoda 2: Dodaj do agenta tylko klucze SSH znajdujące się w pęku kluczy .

Tak więc, chociaż ta ssh-add -Aopcja powinna działać w większości podstawowych przypadków, ostatnio natknąłem się na problem, w którym miałem 6-7 Vagrant boxów (które używają kluczy SSH / tożsamości do dostępu) na komputerze na bardziej powszechnym id_rsa.pubmiejscu.

Krótko mówiąc, ostatecznie zostałem zablokowany na zdalnym serwerze z powodu zbyt wielu nieudanych prób opartych na kluczach / tożsamościach SSH, ponieważ dostęp do serwera był oparty na haśle, a klucze / tożsamości SSH są kluczami / tożsamościami SSH. Więc agent SSH wypróbował wszystkie moje klucze SSH, nie powiodło się i nie mogłem nawet dostać się do monitu o hasło.

Problem polega na tym, ssh-add -Aże po prostu arbitralnie doda każdy klucz SSH / tożsamość, którą masz do agenta, nawet jeśli nie jest to konieczne; tak jak w przypadku pudeł Vagrant.

Moje rozwiązanie po wielu testach było następujące.

Po pierwsze, jeśli masz więcej kluczy / tożsamości SSH dodanych do agenta, niż potrzebujesz - jak pokazano za pomocą, ssh-add -lnastępnie usuń je wszystkie z agenta w następujący sposób:

ssh-add -D

Po wykonaniu tej czynności uruchom agenta SSH jako proces działający w tle:

eval "$(ssh-agent -s)"

Teraz robi się dziwnie i nie jestem pewien, dlaczego. W niektórych przypadkach możesz specjalnie dodać ~/.ssh/id_rsa.pubklucz / tożsamość do agenta w następujący sposób:

ssh-add ~/.ssh/id_rsa.pub

Wpisz swoje hasło, naciśnij Returni powinieneś być gotowy.

Ale w innych przypadkach wystarczy uruchomić to, aby dodać klucz / tożsamość:

ssh-add -K

Jeśli to wszystko działało, wpisz ssh-add -li powinieneś zobaczyć jeden samotny klucz / tożsamość SSH na liście.

Wszystko dobrze? Teraz otwórz swoje .bash_profile:

nano ~/.bash_profile

I dodaj tę linię na dole; skomentuj lub usuń -Awersję, jeśli ją masz:

ssh-add -K 2>/dev/null;

Umożliwi to ponowne załadowanie klucza / tożsamości SSH do agenta SSH przy każdym uruchomieniu / ponownym uruchomieniu.

AKTUALIZACJA: Apple dodał teraz UseKeychainopcję do otwartych opcji konfiguracji SSH i rozważa ssh-add -Arównież rozwiązanie.

Począwszy od macOS Sierra 10.12.2, Apple (zakładam) dodał UseKeychainopcję konfiguracji dla konfiguracji SSH. Sprawdzanie strony podręcznika (przez man ssh_config) pokazuje następujące informacje:

UseKeychain
        On macOS, specifies whether the system should search for
        passphrases in the user's keychain when attempting to use a par-
        ticular key. When the passphrase is provided by the user, this
        option also specifies whether the passphrase should be stored
        into the keychain once it has been verified to be correct.  The
        argument must be ``yes'' or ``no''.  The default is ``no''.

Sprowadza się to do tego, że Apple widzi rozwiązanie jako albo dodanie ssh-add -Ado twojego, .bash_profile jak wyjaśniono w tym bilecie Open Radar, lub dodanie UseKeychainjako jednej z opcji na użytkownika ~/.ssh/config.

JakeGould
źródło
3

Jukka Suomela „s odpowiedź jest poprawna, ale jeśli używasz opensshzainstalować z homebrew, wtedy trzeba także odinstalować go z:

brew remove openssh

... aby powrócić do domyślnego systemu openssh, ponieważ ten homebrew nie obsługuje UseKeychainwpisu konfiguracji ssh.

Greg Dubicki
źródło
1
Jeśli ktoś chce tego z homebrew's, ping mnie tutaj: github.com/rdp/homebrew-openssh-gssapi
rogerdpack
1

Wypróbowałem wszystkie sugerowane tutaj rozwiązania, ale nie mam skonfigurowanego pęku kluczy na moim komputerze Mac.

Dodanie do następującego wiersza u góry .ssh/configpliku na komputerze lokalnym i zdalnym działało dla mnie.

PubkeyAcceptedKeyTypes=+ssh-dss 
Roei Bar Aviv
źródło
1

Musisz .plistdodać plik, ~/Library/LaunchAgents/aby działał ssh-add -Aprzy każdym uruchomieniu systemu macOS.

Jest to jedno polecenie, które to robi (z kluczy SSH-in-macOS-Sierra-keychain ), które jest:

curl -o ~/Library/LaunchAgents/ssh.add.a.plist https://raw.githubusercontent.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain/master/ssh.add.a.plist
AlecRust
źródło