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-add
z -A
opcją - która dodaje wszystkie znane tożsamości do agenta SSH przy użyciu dowolnych haseł przechowywanych w twoim 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_profile
plik 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 -A
opcja powinna działać w przypadku większości podstawowych przypadków, niedawno natknąłem się na problem, w którym miałem 6-7 skrzynek Vagrant (które używają kluczy SSH / tożsamości w celu uzyskania dostępu) na komputerze na bardziej powszechnym id_rsa.pub
miejscu.
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 to klucze / tożsamości 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 -l
nastę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
klucz / tożsamość do agenta w następujący sposób:
ssh-add ~/.ssh/id_rsa
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 -l
i 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ń -A
wersję, 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 UseKeychain
opcję do otwartych opcji konfiguracji SSH i rozważa ssh-add -A
również rozwiązanie.
Począwszy od macOS Sierra 10.12.2, Apple dodało UseKeychain
opcję 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 -A
do twojego, .bash_profile
jak wyjaśniono w tym bilecie Open Radar, lub dodanie UseKeychain
jako jednej z opcji na użytkownika ~/.ssh/config
.
$ ssh-add -K
daje missh-add: illegal option -- K