Miałem ten problem również podczas próby wdrożenia jakiegoś kodu za pomocą Capistrano . Bardzo frustrujące. Oto dwie metody, które znam, aby poradzić sobie z tym problemem.
Metoda 1: Dodaj wszystkie znane klucze do agenta SSH.
Rozwiązaniem, które znalazłem, jest uruchomienie ssh-add
z opcją -A
- co doda wszystkie znane tożsamości do agenta SSH, używając dowolnych haseł przechowywanych w keychainie, jak poniżej:
ssh-add -A
Teraz to działa, ale nie będzie utrzymywać się podczas restartów. Więc jeśli chcesz już nigdy więcej się o to nie martwić, po prostu otwórz plik ~/.bash_profile
swojego 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 Terminala, wszystko powinno być dobrze!
Metoda 2: Dodaj tylko klucze SSH, które są w keychain do agenta.
Więc podczas gdy opcja ssh-add -A
powinna działać dla większości podstawowych przypadków, natknąłem się ostatnio na problem, w którym miałem 6-7 skrzynek Vagrant (które używają kluczy/tożsamości SSH do dostępu) skonfigurowanych na maszynie na górze bardziej powszechnego id_rsa.pub
w miejscu.
Krótka historia, skończyło się na tym, że 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 udało się i nie mogłem nawet dostać się do monitu o hasło.
Problem polega na tym, że ssh-add -A
po prostu arbitralnie doda każdy klucz/tożsamość SSH, który masz do agenta, nawet jeśli nie jest to konieczne; tak jak w przypadku skrzynek 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 na przykładzie ssh-add -l
, to usuń je wszystkie z agenta w następujący sposób:
ssh-add -D
Mając to zrobione, następnie uruchom agenta SSH jako proces w tle tak:
eval "$(ssh-agent -s)"
Teraz robi się dziwnie i nie jestem zbyt pewny dlaczego. W niektórych przypadkach możesz specjalnie dodać klucz/identyfikator ~/.ssh/id_rsa.pub
do agenta w ten sposób:
ssh-add ~/.ssh/id_rsa.pub
Wpisz swoje passphrase, naciśnij Return i powinieneś być dobry do pracy.
W innych przypadkach wystarczy uruchomić to, aby klucz/identyfikator został dodany:
ssh-add -K
Jeśli to wszystko zadziałało, wpisz ssh-add -l
i powinieneś zobaczyć jeden samotny klucz/identyfikator SSH na liście.
Wszystko w porządku? Teraz otwórz swój klucz .bash_profile
:
nano ~/.bash_profile
I dodaj tę linię na dole; skomentuj lub usuń wersję -A
, jeśli masz ją na miejscu:
ssh-add -K 2>/dev/null;
Pozwoli to na ponowne załadowanie klucza/tożsamości SSH do agenta SSH przy każdym uruchomieniu/restarcie systemu.
UPDATE: Apple dodał teraz opcję UseKeychain
do otwartych opcji konfiguracyjnych SSH i uważa, że ssh-add -A
jest również rozwiązaniem.
Od macOS Sierra 10.12.2, Apple (zakładam) dodał opcję konfiguracyjną UseKeychain
dla konfiguracji SSH. Sprawdzanie strony man (poprzez 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''.
Co sprowadza się do tego, że Apple widzi rozwiązanie jako albo dodanie ssh-add -A
do twojego .bash_profile
jak wyjaśniono w tym bilecie Open Radar lub dodanie UseKeychain
jako jednej z opcji w per user ~/.ssh/config
.