Odmowa pozwolenia na Github: agent ssh add nie ma tożsamości

148

Po raz pierwszy korzystam z GitHub i nie mam doświadczenia w korzystaniu z konsoli. Korzystam z MacBooka z Bash. Kiedy próbuję uzyskać dostęp do GitHub, otrzymuję to:

git clone git@github.com:dhulihan/league-of-legends-data-scraper.git
Cloning into 'league-of-legends-data-scraper'...
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Próbowałem postępować zgodnie z instrukcjami na stronie Github dotyczącymi odmowy udzielenia pozwolenia.

Kiedy używam ssh -vT [email protected], otrzymuję następujące informacje:

OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: Connecting to github.com [192.30.252.129] port 22.
debug1: Connection established.
debug1: identity file /Users/XXXX/.ssh/id_rsa type -1
debug1: identity file /Users/XXXX/.ssh/id_rsa-cert type -1
debug1: identity file /Users/XXXX/.ssh/id_dsa type -1
debug1: identity file /Users/XXXX/.ssh/id_dsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.2
debug1: Remote protocol version 2.0, remote software version libssh-0.6.0
debug1: no match: libssh-0.6.0
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-sha1 none
debug1: kex: client->server aes128-ctr hmac-sha1 none
debug1: sending SSH2_MSG_KEXDH_INIT
debug1: expecting SSH2_MSG_KEXDH_REPLY
debug1: Server host key: RSA 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48
debug1: Host 'github.com' is known and matches the RSA host key.
debug1: Found key in /Users/XXXX/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /Users/XXXX/.ssh/id_rsa
debug1: Trying private key: /Users/XXXX/.ssh/id_dsa
debug1: No more authentication methods to try.
Permission denied (publickey).

Następnie eval "$(ssh-agent -s)"zwraca „Pid agenta 2314”, ale ssh-add -lzwraca „Agent nie ma tożsamości”.

I w tym utknąłem.

Ciemny
źródło
Czy masz klucza SSH stworzył? Czy masz to na swoim koncie na githubie? Czy masz klucz na swoim Macu?
Etan Reisner
Szukałem odpowiedzi na to pytanie (nie znałem całego systemu) i znalazłem to: mac.github.com To rozwiązało wszystkie moje problemy. Gorąco polecam. Dzięki za pchnięcie we właściwym kierunku, Etan!
Dark
4
Możesz dodać, że jest to odpowiedź na to pytanie (z dalszymi szczegółami, jak rozwiązało Twój problem) i zaakceptować swoją odpowiedź.
Etan Reisner
OK, przesłałem odpowiedź. SO mówi mi, że mogę to zaakceptować tylko w 2 godziny.
Dark

Odpowiedzi:

194

Pełne szczegóły w tej odpowiedzi .

Podsumowując, gdy ssh-add -lpowróci „Środek nie ma tożsamości”, oznacza to, że klucze używane przez ssh(przechowywane w plikach, takich jak ~/.ssh/id_rsa, ~/.ssh/id_dsaetc.) są albo brakuje, są one nie wiadomo ssh-agent, co jest czynnikiem uwierzytelniania, albo że ich uprawnienia są ustawione niepoprawnie (na przykład świat do zapisu).

Jeśli brakuje twoich kluczy lub ich nie wygenerowałeś, użyj ssh-keygen -t rsa, a następnie, ssh-addaby je dodać.

Jeśli klucze istnieją, ale nie są znane ssh-agent(na przykład jeśli znajdują się w niestandardowym folderze), ssh-add /path/to/my-non-standard-ssh-folder/id_rsadodaj je za pomocą.

Zobacz tę odpowiedź, jeśli masz problemy z ssh-addlub  ssh-agent.

John Doedoe
źródło
4
Dziękuję @Doedoe za link do miłej i krótkiej odpowiedzi. A dla tych, którzy mają klucze (tj. Wiele kont Git), może być konieczne użycie ssh-add /path/to/keyXdla każdego, szczególnie jeśli mają niestandardowe nazwy. Szczegóły tutaj: stackoverflow.com/questions/3225862/ ... (miła odpowiedź)
tuk0z
Dzięki za to. Utknąłem tutaj ... ale zdałem sobie sprawę, że muszę uruchomić ssh-add ponownie po rozwiązaniu części problemu z uprawnieniami. Po tym ssh -vT [email protected]nie zadziałało. Musiałem dodać bezwzględną ścieżkę, jak wspomniany powyżej komentator. Potem był już sos.
jungledev
2
W drugim przypadku zapomniałem hasła i odzyskałem je za pomocą help.github.com/articles/how-do-i-recover-my-ssh-key-passphrase
Malder
111

Spróbuj tego:

ssh-add ~/.ssh/id_rsa

pracował dla mnie

Boltun Oreh
źródło
5
Cześć, witaj w SO. Wyjaśnij swój kod, aby inni użytkownicy mogli zrozumieć, co się dzieje. Twoje zdrowie.
Cthulhu,
4
Po ponownym uruchomieniu klucze znikną i musisz ponownie je dodać.
Louwki
@Louwki Yeah ... to bardzo denerwujące. Czy znasz sposób na obejście tego?
Chris Cirefice
3
@ChrisCirefice po prostu wykonaj ssh-add z parametrem, aby dodać je na stałe do pęku kluczy. ssh-add -K ~ / .ssh / [twój-klucz-prywatny]
Louwki
1
W moim przypadku uprawnienia do pliku były nieprawidłowe dla klucza prywatnego. Naprawiono chmod 600 ~/.ssh/id_rsawięcssh-add ~/.ssh/id_rsa
Morteza Ziyae
39

ODPOWIEDŹ 2019 dla macOS Sierra, High Sierra i Catalina:

PS: w przypadku większości innych odpowiedzi musisz utworzyć nowy klucz ssh ... ale nie musisz tego robić :)

Jak opisano szczegółowo na https://openradar.appspot.com/27348363 , macOS / OS X do Yosemite używał do zapamiętania kluczy SSH dodanych poleceniemssh-add -K <key>

Oto 4 kroki, które musiałem wykonać, aby zadziałało:

1: ssh-add ~/.ssh/PATH_TO_YOUR_SSH_PRIVATE_KEY (e.g. ~/.ssh/id_rsa)

2: Dodaj następujące elementy~/.ssh/config

Host * 
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile PATH_TO_YOUR_SSH_PRIVATE_KEY (e.g. ~/.ssh/id_rsa)

3: upewnij się, że usunąłeś wszystkie wpisy gitconfig, które używają pomocnika osxkeychain:

 https://github.com/gregory/dotfiles/commit/e38000527fb1a82b577f2dcf685aeefd3b78a609#diff-6cb0f77b38346e0fed47293bdc6430c6L48

4: zrestartuj terminal, aby to zadziałało.

metakungfu
źródło
3
Świetna odpowiedź, sam miałem o tym wspomnieć! Wygląda na to, że OS X 10.12.2 i nowsze nie ładują automatycznie tożsamości do ssh-agent (co osobiście uważam za naprawdę głupią decyzję dotyczącą użyteczności, ale rozumiem konsekwencje dla bezpieczeństwa). Musisz więc zmodyfikować konfigurację SSH, aby załadować je ręcznie. Chciałbym tylko, żeby wynik błędu lepiej prowadził do rozwiązania, a nie godzinę przeszukiwania Internetu.
Chris Cirefice
12

Przez chwilę utknąłem w tym samym problemie, który ostatecznie rozwiązałem.

Mój problem : nie mogłem wykonać żadnego pchnięcia. Mogłem sprawdzić i zobaczyć mojego pilota (używając git remote -v), ale kiedy wykonałem git push origin master, zwrócił: Permission denied (publickey). fatal: Could not read from remote repository.i tak.

Jak to rozwiązałem:

  • Wygenerowałem klucz za pomocąssh-keygen -t rsa . Podanie nazwy pliku klucza (gdy pojawi się pytanie) było bezużyteczne.
  • Mógłbym wtedy dodać klucz (do GIT) : ssh-add /Users/federico/.ssh/id_rsa, który pomyślnie zwróconyIdentity added: /Users/myname/.ssh/id_rsa (/Users/myname/.ssh/id_rsa)
  • Dodałem klucz SSH do github, korzystając z tej strony pomocy .
  • Po wypróbowaniu wszystkich poleceń na stronie pomocy Github „Odmowa uprawnień do publikacji”, tylko ssh-add -lpolecenie działało / wydawało się przydatne (po wykonaniu poprzednich kroków), pomyślnie zwróciło mój klucz. Ostatni krok pokazuje, gdzie sprawdzić swój klucz publiczny na stronie GitHub. A ta komenda pomoże Ci sprawdzić wszystkie klawisze: ls -al ~/.ssh.

Wtedy polecenie push w końcu zadziałało!

Mam nadzieję, że to pomoże ! Powodzenia wszystkim.

Fed Zee
źródło
7

Uruchom następujące polecenia:

ssh-keygen -t rsa
ssh-add /Users/*yourUserNameHere*/.ssh/id_rsa** 
pbcopy < ~/.ssh/id_rsa.pub**

Przejdź do swojego konta Github: https://github.com/settings/profile

1) Kliknij: klucze SSH i GPG

2) Nowy klucz SSH i wklej go tam

3) Dodaj klucz SSH

Gotowe!

zouhair khallaf
źródło
Tak - jeśli wykonałeś pozostałe kroki tworzenia pliku id_rsa.pub, skopiuj i wklej ten wiersz pbcopy, który kopiuje klucz do schowka i postępuj zgodnie z instrukcjami @zouhair - github musi znać Twój klucz. Szczególnie jeśli używasz 2FA.
davidrynn
Jestem trochę zdezorientowany, ponieważ obecna dokumentacja mówi, że git tworzy github_rsa / github_rsa.pub. Mam oba pliki w katalogu /.ssh, a mimo to nie mogę „uzyskać pozwolenia”. Utworzyłem kopie w tym samym katalogu przy użyciu id_rsa bez skutku.
Mark Löwe
6

przede wszystkim musisz przejść do katalogu ssh
dla tego typu po poleceniu w terminalu w mac lub czymkolwiek, czego używasz w oknie

cd ~/.ssh

teraz znajduje się w ssh,
tutaj możesz znaleźć wszystkie klucze / pliki ssh związane ze wszystkimi projektami. teraz wpisz następujące polecenie, aby pokazać, czy dostępny jest jakikolwiek klucz ssh

ls

to pokaże ci wszystkie dostępne ssh, w moim przypadku były
teraz dwa , będziesz musiał uruchomić agenta, aby dodać do niego ssh. Dla tego typu następujące polecenie

eval "$(ssh-agent -s)"

teraz na koniec dodasz ssh do tego typu agenta po poleceniu

ssh-add ~/.ssh/your-ssh

zastąpić

zamień your-ssh na nazwę pliku ssh, którą otrzymałeś z listy z drugiego kroku ls command

Sultan Ali
źródło
5

Może to spowodować, że w przypadku każdego nowego terminala identyfikator agenta będzie inny. Musisz dodać klucz prywatny dla agenta

$ ssh-add <path to your private key>
user9253738
źródło
1

Dodatkowym elementem, który zdałem sobie sprawę, jest to, że zwykle folder .ssh jest tworzony w folderze głównym w systemie Mac OS X / Users /. Jeśli spróbujesz użyć ssh -vT [email protected] z innego folderu, spowoduje to błąd, nawet jeśli dodałeś prawidłowy klucz.

Musisz ponownie dodać klucz (ssh-add 'poprawna ścieżka do id_rsa') z bieżącego folderu, aby pomyślnie się uwierzytelnić (zakładając, że przesłałeś już klucz do swojego profilu w Git)

Varghese Cherian
źródło
1

To zadziałało dla mnie:
chmod 700 .ssh chmod 600 .ssh/id_rsa chmod 644 .ssh/id_rsa.pub

Następnie wpisz: ssh-add ~/.ssh/id_rsa

Nacho Cornejo
źródło
Nie sądzę, żeby pytanie dotyczyło ~/.sshuprawnień. Mimo to możesz znacznie poprawić swoją odpowiedź, dodając pełne polecenie (tutaj chmod) i wyjaśniając, co to robi i dlaczego jest potrzebne.
Robert
0

Po długich zmaganiach w końcu udało mi się rozwiązać ten problem w systemie Windows, Dla mnie zmienna środowiska użytkownika GIT_SSH została ustawiona na

„C: \ Program Files (x86) \ WinScp \ PuTTY \ plink.exe”

który został zainstalowany wraz z WinScp. Zmieniłem wskazanie, aby użyć domyślnego ssh.exe, który jest dostarczany z git-scm „C: \ Program Files \ Git \ usr \ bin \ ssh.exe”

Santan
źródło
0

Kroki dla BitBucket:

jeśli nie chcesz generować nowego klucza, SKIP ssh-keygen

ssh-keygen -t rsa 

Skopiuj klucz publiczny do schowka:

clip < ~/.ssh/id_rsa.pub

Zaloguj się do zasobnika bitów: Przejdź do Wyświetl profil -> Ustawienia -> Klucze SSH (na karcie Zabezpieczenia) Kliknij Dodaj klucz, Wklej klucz w polu, dodaj opisowy tytuł

Wróć do Git Bash:

ssh-add -l

Powinieneś wziąć :

2048 SHA256:5zabdekjjjaalajafjLIa3Gl/k832A /c/Users/username/.ssh/id_rsa (RSA)

Teraz: git pullpowinno działać

ForeverLearner
źródło
0

Miałem ten problem po przywróceniu dysku twardego z kopii zapasowej.

Mój problem: mogłem sprawdzić i zobaczyć mojego pilota (używając git remote -v), ale kiedy wykonałem git push origin master, zwrócił: Permission denied (publickey). krytyczny: nie można odczytać ze zdalnego repozytorium.

Miałem już folder SSH i klucze SSH, a dodanie ich przez Terminal ( ssh-add /path/to/my-ssh-folder/id_rsa) pomyślnie dodało moją tożsamość, ale nadal nie mogłem wypchnąć i nadal otrzymałem ten sam błąd. Wygenerowanie nowego klucza było dla mnie złym pomysłem, ponieważ był powiązany z innymi bardzo bezpiecznymi uprawnieniami w AWS.

Okazało się, że połączenie między kluczem a moim profilem na Githubie zostało zerwane.

Rozwiązanie: ponowne dodanie klucza do Github w Profil> Ustawienia> Klucze SSH i GPG rozwiązało problem.

Ponadto: moje konto miało skonfigurowane uwierzytelnianie dwuskładnikowe. W takim przypadku, jeśli Terminal żąda poświadczeń, użyj swojej nazwy użytkownika - ale NIE hasła Github. W przypadku uwierzytelniania dwuskładnikowego musisz użyć swojego kodu uwierzytelniającego (dla mnie został on wygenerowany przez Authy na moim telefonie i musiałem go skopiować do terminala dla pw).

Deborah
źródło