Muszę uruchomić to polecenie od czasu aktualizacji do systemu macOS:
ssh-add -K
Rozwiązuje problem po ponownym uruchomieniu, ale muszę uruchamiać to polecenie przy każdym logowaniu do komputera.
Jeśli nie uruchomię powyższego polecenia, moje klucze ~/.ssh
zostaną pominięte i zostanie wyświetlone pytanie o hasło serwera w celu nawiązania połączenia.
$ ssh-add -K
daje missh-add: illegal option -- K
-K
. Zobacz odpowiedź @JakeGould na rozwiązanie.Odpowiedzi:
Począwszy od macOS Sierra 10.12.2 Apple dodało
ssh_config
opcję o nazwie,UseKeychain
która pozwala na „właściwe” rozwiązanie problemu. Dodaj następujące elementy do~/.ssh/config
pliku:Ze
ssh_config
man
strony 10.12.2:źródło
IdentityFile ~/.ssh/id_rsa
jest zbędny i nie jest potrzebny (patrząc na domyślne opcje). Nigdy nie ustawiłem tej opcji w moim pliku konfiguracyjnym ssh.~/.ssh/config~
jest lepsza, ponieważ rozwiązuje problem nassh
poziomie. Nie jestem w 100% pewien, że.bash_profile
mod będzie działał dla klientów GUI korzystających z ssh bez powłoki.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: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:I dodaj tę linię na dole:
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 powszechnymid_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:Po wykonaniu tej czynności uruchom agenta SSH jako proces działający w tle:
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:Wpisz swoje hasło, naciśnij Returni powinieneś być gotowy.
Ale w innych przypadkach wystarczy uruchomić to, aby dodać klucz / tożsamość:
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
:I dodaj tę linię na dole; skomentuj lub usuń
-A
wersję, jeśli ją masz: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żassh-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 (przezman ssh_config
) pokazuje następujące informacje: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 dodanieUseKeychain
jako jednej z opcji na użytkownika~/.ssh/config
.źródło
ssh-add -K [path to key]
i wpisz pw po wyświetleniu monitu. Keychain będzie przechowywać hasło, a następnie ssh-add je dostanie.UseKeychain
iAddKeysToAgent
automatycznie dodawał klucze z twojego ssh_config. Nie wymaga skryptowania powłoki. Zobacz @mluisbrown odpowiedź poniżej, aby uzyskać zaktualizowane informacje na 10.12.2ssh-add -A
skrypt rc, jeśli chcesz, aby klucze były zawsze ładowane.”¯\_(ツ)_/¯
Jak wyjaśniono tutaj , jest to zalecana metoda od macOS 10.12.2 :
Dodaj następujące wiersze do
~/.ssh/config
pliku:Każdy klucz dodany do ssh-agent za pomocą
ssh-add /path/to/your/private/key/id_rsa
polecenia zostanie automatycznie dodany do pęku kluczy i powinien zostać automatycznie załadowany po ponownym uruchomieniu.Dodaję tę odpowiedź, ponieważ:
IdentityFile ~/.ssh/id_rsa
wiersza, ale ta opcja nie jest potrzebna do automatycznego ładowania kluczy (i faktycznie wiąże ten konkretny klucz dla sekcji hosta, do której go dodajesz, czego nie będziesz chciał, jeśli użyjesz różnych kluczy do różne hot).UseKeychain
, ale to nie wystarczy, aby zachować kluczessh-agent
po ponownym uruchomieniu.źródło
ssh-add -L
a raport zostanie zgłoszonyThe agent has no identities
. Nic się nie pojawi, dopóki się nie połączysz.AddKeysToAgent
Nie utrzymują kluczy między restartów w żaden sposób!Napisałem krótki post na ten temat, który może ci pomóc.
Rozwiązaniem jest wywoływanie
ssh-add -A
polecenia przy każdym uruchomieniu.Po prostu dodaj
.plist
do ścieżki plik z następującą zawartością~/Library/LaunchAgents/
lub utwórz go za pomocą aplikacji Lingon :źródło
Od macOS 10.12.2 możesz użyć tej
UseKeychain
opcji. Przeczytaj więcej tutaj lub zajrzyj doman ssh_config
.Więc po prostu wykonaj następujące czynności:
echo "UseKeychain yes" >> ~/.ssh/config
źródło
>>
jest zagrożone, jeśli wprowadzisz polecenie wiele razy. Lepiej wykonaj ręczną edycję pliku, zgodnie z opisem w odpowiedzi mluisbrown lub ChrisJF .Miałem wcześniej ten problem i znalazłem sposób na obejście tego. Właśnie utworzyłem plik o nazwie
config
w moim~/.ssh
folderze, do którego dodałem następujące linie:Nie jestem pewien dlaczego, ale
Host
iHostName
obie są ważne. W moim przypadku, jeśli jeden z nich nie był obecny, rozwiązanie nie działało.Potem zrobiłem
ssh-add -K
i działało nawet po restarcie.źródło
Odkryłem, że
ssh-add -K
dało mi to „ nielegalną opcję - K ”. Stało się tak, ponieważ ssh-add była dziwną wersją pochodzącą z / usr / local / bin (zainstalowaną przez brew?). Byłem w stanie dodać klucz poprzez specyficzne użycie ssh-add znajdującego się w / usr / bin:źródło
Jeśli używasz innej wersji ssh (np. Instalowanej przez homebrew), powyższe rozwiązania nie będą działać od razu po wyjęciu z pudełka. Na przykład,
AddKeysToAgent yes
aUseKeychain yes
w.ssh/config
pliku nie są rozpoznawane przez wersjach innych niż Apple SSH i spowoduje błąd. To samo dotyczy opcji-A
lub-K
dlassh
klienta.Oznacza to , że odpowiedź @mluisbrown w ogóle nie zadziała. Możesz użyć metody 1 z odpowiedzi @JakeGould i jawnie użyć
ssh-add
narzędzia macOS w swoim,.bash_profile
aby dodać wszystkie klucze do pęku kluczy, tj .:Jak wspomniano w komentarzu powyżej , może być konieczne dodanie klucza do pęku kluczy: np
/usr/bin/ssh-add -K .ssh/github
źródło
Wystarczy zmienić ~ / .ssh / config, aby dodać UseKeyChain dla wszystkich hostów, aby zatrzymać ten powtarzający się koszmar;)
Jeśli plik jest pusty lub nie istnieje, utwórz i / lub dodaj powyższą konfigurację.
źródło
Zaktualizowałem system do Mac OS X Sierra (10.12.6). Mógłbym ssh na innych hostach, ale nie na github.com.
Oto, co musiałem wstawić do ~ / .ssh / config:
Po tej zmianie mogłem używać github jak poprzednio.
źródło