Słynny „BŁĄD: odmowa dostępu do .git użytkownikowi”

119

Próbowałem googlować i przeczytać https://help.github.com/en/articles/connecting-to-github-with-ssh i różne, różne przewodniki. Nie mogę git push -u origin masterlub git push origin master(to samo polecenie).

Konto git mam od co najmniej 2 lat. Udało mi się utworzyć repozytoria i push -u origin masterdobrze na moim laptopie, ale na tym komputerze mam problemy.

Oto, czego próbowałem:

1. Skonfigurowałem nazwę użytkownika git

2. Skonfigurowałem adres e-mail użytkownika git

3. Umieściłem zawartość mojego /home/meder/.ssh/id_rsa.pub na stronie konta github. Sprawdziłem, że nie wkleiłem żadnych spacji

4. Utworzyłem plik ~ / .ssh / config z następującą zawartością:

  Host github.com
  User git
  Hostname github.com
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/id_rsa

Chmodowałem .ssh do 700, id_rsa 600

5. Dodałem właściwe zdalne źródło bez robienia literówek :git remote add origin [email protected]:medero/cho.git

6. Aby potwierdzić # 5, oto mój plik .git / config. Katalog jest poprawny i nie jest to inny katalog:

[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = [email protected]:medero/cho.git

7. ssh [email protected] -v daje mi pomyślne uwierzytelnienie

8. Jedną dziwną rzeczą jest to, że nazwa użytkownika, którą mnie wita, została tdo niego dołączona. Moja nazwa użytkownika github to mederonie medert.

Cześć mederot! Udało Ci się uwierzytelnić, ale GitHub nie zapewnia dostępu do powłoki.

9. Ja nie za serwerem proxy lub zapory

10. Klucz jest oferowany, oto wyjście z -v:

debug1: Host 'github.com' is known and matches the RSA host key.
debug1: Found key in /home/meder/.ssh/known_hosts:58
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering public key: /home/meder/.ssh/id_rsa
debug1: Remote: Forced command: gerve mederot
debug1: Remote: Port forwarding disabled.
debug1: Remote: X11 forwarding disabled.
debug1: Remote: Agent forwarding disabled.
debug1: Remote: Pty allocation disabled.
debug1: Server accepts key: { some stuff, dont know if i should share it

debug1: Remote: Forced command: gerve mederot
debug1: Remote: Port forwarding disabled.
debug1: Remote: X11 forwarding disabled.
debug1: Remote: Agent forwarding disabled.
debug1: Remote: Pty allocation disabled.
debug1: Authentication succeeded (publickey).

11. Oto polecenia, których użyłem

mkdir cho
git init
touch README
git add README
git commit -m 'test'
git remote add origin [email protected]:medero/cho.git
git push -u origin master

12. Nie chcę tworzyć nowego klucza SSH.

13. Jeśli git clone przy użyciu ssh i edytuję, zatwierdzam i git push, otrzymuję dokładnie to samo.

14. Oto rzeczywisty błąd:

$ git push
ERROR: Permission to medero/cho.git denied to mederot.
fatal: The remote end hung up unexpectedly

15. Skonfigurowałem nazwę użytkownika github i token github:

$ git config --global github.user medero $ git config --global github.token 0123456789yourf0123456789token Ustawia token GitHub dla wszystkich instancji git w systemie

16. Potwierdziłem, że moja nazwa użytkownika github NIE jest, mederota mój token Github JEST PRAWIDŁOWY na stronie mojego konta (sprawdzone pierwsze 2 znaki i ostatnie 2 znaki).

17. Aby potwierdzić # 16, ~ / .gitconfig zawiera

[github]
    token = mytoken...
    user = medero

18. Zrobiłem, ssh-key add ~/.ssh/id_rsajeśli to było konieczne ...



TEORIE:

Podejrzewam, że jest coś podejrzanego, ponieważ po uwierzytelnieniu przez ssh powitanie użytkownika jest, mederota nie medero, co jest moim kontem. Czy coś na moim koncie github mogło zostać nieprawidłowo zapisane w pamięci podręcznej?

Podejrzewam również dziwne zachowanie lokalnego buforowania ssh, ponieważ jeśli ja mv ~/.ssh/id_rsa KAKAi tak mv ~/.ssh/id_rsa.pub POOPOOzrobię ssh [email protected] -v, nadal uwierzytelnia mnie i mówi, że obsługuje mój /home/meder/.ssh/id_rsa, kiedy zmieniam jego nazwę ?! To musi być buforowane ?!

meder omuraliev
źródło
Używam „Github for Windows” i miałem podobny problem podczas przełączania między dwoma kontami Github. Oto moje rozwiązanie: stackoverflow.com/questions/18565876/…
Alisa
Jeśli chcesz wypchnąć z 2 różnych lokalnych repozytoriów do odpowiedniego pierwotnego zdalnego repozytorium, sprawdź to: stackoverflow.com/q/63291726/12033855
an4s911

Odpowiedzi:

35

Zakładam, że w kroku 18 masz na myśli ssh-add ~/.ssh/id_rsa? Jeśli tak, to wyjaśnia to:

Podejrzewam również dziwne działanie lokalnego buforowania ssh, ponieważ jeśli i mv ~ / .ssh / id_rsa KAKA i mv ~ / .ssh / id_rsa.pub POOPOO i zrobię ssh [email protected] -v, nadal uwierzytelnia mnie i mówi, że służy mój /home/meder/.ssh/id_rsa, kiedy zmieniłem jego nazwę ?! To musi być buforowane ?!

... ponieważ ssh-agentbuforuje twój klucz.

Jeśli spojrzysz na GitHub, jest tam konto mederot . Czy na pewno nie ma to z tobą nic wspólnego? GitHub nie powinien zezwalać na dodanie tego samego klucza publicznego SSH do dwóch kont, ponieważ gdy używasz [email protected]:...adresów URL, identyfikuje użytkownika na podstawie klucza SSH. (To nie powinno być dozwolone jest potwierdzona tutaj ).

Podejrzewam więc (w kolejności malejącego prawdopodobieństwa), że zachodzi jeden z poniższych przypadków:

  1. Utworzyłeś wcześniej konto mederot i dodałeś do niego swój klucz SSH.
  2. Ktoś inny uzyskał kopię Twojego klucza publicznego i dodał go do konta mederot GitHub.
  3. W GitHubie jest straszny błąd.

Jeśli nie ma 1, zgłosiłbym to do GitHub, aby mogli sprawdzić około 2 lub 3.

Więcej :

ssh-add -l sprawdź, czy istnieje więcej niż jeden identyfikator, jeśli tak, usuń go przez ssh-add -d "ten plik klucza"

Mark Longair
źródło
Wielka pomoc Mark! To naprawiło to również dla mnie.
Leachy Peachy
To było to. Uratowałeś mi ogromny ból głowy. Teraz muszę tylko pamiętać, aby uruchamiać za ssh-add ...każdym razem, gdy chcę zmienić logowanie na github / ssh.
Cerin
Z jakiegoś powodu ssh-add -d <keyfile>nie działa. (Ręczne usuwanie plików tak się stało.) Wspomniane buforowanie musi zostać w jakiś sposób ręcznie załadowane ponownie. W jaki sposób?
not2qubit
ssh-add -d-> „Nie udało się nawiązać połączenia z agentem uwierzytelniającym”.
Alex
To ssh-addbył ten kawałek, który zrobił to dla mnie. Dzięki!
rayryeng
160

Po kilku dniach szukania w Google stwierdziłem, że jest to jedyne pytanie podobne do mojej sytuacji.

Jednak właśnie rozwiązałem problem! Dlatego zamieszczam tutaj moją odpowiedź, aby pomóc każdemu, kto szuka tego problemu.

Oto co zrobiłem:

  1. Otwórz „Keychain Access.app” (możesz go znaleźć w Spotlight lub LaunchPad)

  2. Wybierz „Wszystkie elementy” w kategorii

  3. Wyszukaj „git”

  4. Usuń każdy stary i dziwny element

  5. Spróbuj ponownie Push i po prostu DZIAŁAŁO

Alice Chan
źródło
17
Kciuki w górę, kolego. Jesteś bohaterem.
Prince Bansal
1
Do diabła, tak, wreszcie, po zmaganiach z niezliczonymi kluczami SSH, to jest odpowiedź, która zadziałała! Wygląda na to, że dostęp do komputerów Mac i https korzysta z pęku kluczy. Zwariowany.
Patrick Chu
1
BŁOGOSŁAWIŚCIE, ŻE PRÓBOWAŁAŚ ROZWIĄZAĆ TO PRZEZ TYGODNIE
Jon Hendershot
1
Wygląda na bardzo pomocne, ale nie jest jasne, co to jest old & strange. Mam zamiar zepsuć mnóstwo rzeczy ..?
geoteoria
1
@geotheory Te old & strangerzeczy oznaczają stare pozycje z datą i nieprawidłowy adres e-mail lub nazwę użytkownika. Możesz sortować tabelę według Date Modified.
Alice Chan,
92

Jeśli problem pojawia się w systemie Windows, usuń poświadczenia z historii systemu Windows.

  • Przejdź do Menedżera poświadczeń
  • Przejdź do poświadczeń systemu Windows
  • Usuń wpisy w obszarze Ogólne poświadczenia
  • Spróbuj połączyć się ponownie.Tym razem powinien poprosić o poprawną nazwę użytkownika i hasło.

wprowadź opis obrazu tutaj wprowadź opis obrazu tutaj

usuń poświadczenia z git

FAHID
źródło
2
Idealny. Otrzymywałem dostęp 403 za pomocą konta, którego już nie używam. Teraz rozwiązany.
Anton Epikhin
1
wystarczyło mi tylko usunięcie danych logowania do github.com
Bart De Boeck
Tam możesz zmienić swoją nazwę użytkownika i cokolwiek. Oto jest sposób.
WesternGun
Właściwie to też zadziałało, ale co bym zrobił, gdybym miał 2 różne konta?
an4s911
22

Na komputerze Mac, jeśli masz wiele loginów GitHub i nie używasz SSH, wymuś poprawne logowanie, używając:

git remote set-url origin https://[email protected]/username/repo-name.git

Działa to również, jeśli masz problemy z wypychaniem do prywatnego repozytorium.

leanne
źródło
1
Dzięki, to zadziałało dla mnie. Poprosił mnie o podanie hasła i mogłem naciskać po podaniu hasła. Bardzo cenione!
piksel
... ale to nie rozwiązało problemu dla mnie w systemie Windows, tylko na Macu
piksel
... ale sugestia @Fahid powyżej, aby wyczyścić poświadczenia w systemie Windows pomogła
piksel
Jesteś bohaterem.
Vaibhav
To jest prawidłowa odpowiedź, jeśli mamy wiele projektów github, które należą do różnych kont
Gangadhar JANNU
14

To z powodu konfliktu.

Usuń wszystkie klucze z ssh-agent

ssh-add -d ~/.ssh/id_rsa
ssh-add -d ~/.ssh/github

Dodaj klucz github ssh

ssh-add   ~/.ssh/github

Teraz powinno działać.

Sarvesh
źródło
3
ssh-add -Dusuwa również wszystkie tożsamości, może być przydatne, jeśli agent przejdzie w nieprawidłowy stan.
Sam
6

Używam komputera Mac i problem został rozwiązany przez usunięcie rekordu github z aplikacji dostępu do pęku kluczy: Oto, co zrobiłem:

  1. Otwórz „Keychain Access.app” (możesz go znaleźć w Spotlight lubLaunchPad)
  2. Wybierz „Wszystkie elementy” w kategorii
  3. Wyszukaj „git”
  4. Usuń wszystkie stare i dziwne elementy Spróbuj ponownie wypchnąć i po prostu DZIAŁAŁO

Powyższe kroki zostały skopiowane z @spyar dla ułatwienia.

Deepak Bhatta
źródło
6

Uważam, że rozwiązanie jest takie samo, jak zapewnia @spyar, czyli aplikacja Dostęp do pęku kluczy przechowująca starą nazwę użytkownika.

Istnieją 2 rozwiązania tej sytuacji:

  1. Usuń informacje w dostępie do pęku kluczy według
    • Otwórz aplikację Dostęp do pęku kluczy
    • Wyszukaj github
    • Usuń odpowiednie poświadczenia

Lub

  1. Jeśli chcesz użyć klucza ssh . Po prostu zmień swój adres URL repozytorium z https

https://github.com/username/repo.git

w

[email protected]: nazwa użytkownika / repo.git

Mam nadzieję że to pomoże.

thuanle
źródło
2

Niedawno napotkałem ten problem na starym repozytorium na moim komputerze, które zostało przesłane za pomocą protokołu HTTPS. kroki 5 i 6 rozwiązały mój problem przez ponowne ustawienie zdalnego adresu URL dla mojego repozytorium z używania adresu URL https na adres URL ssh

sprawdzanie, czy pilot używa adresu URL https

> git remote -v
origin  https://github.com/ExampleUser/ExampleRepo.git (fetch)
origin  https://github.com/ExampleUser/ExampleRepo.git (push)

następnie ustaw ponownie źródło, aby użyć adresu URL ssh

> git remote set-url origin [email protected]:ExampleUser/ExampleRepo.git

weryfikacja nowego pilota

> git remote -v
origin  [email protected]:ExampleUser/ExampleRepo.git (fetch)
origin  [email protected]:ExampleUser/ExampleRepo.git (push)

mógł teraz z powodzeniem git push -u origin

Nadal nie jestem pewien, jakie ustawienie zmieniłbym, co mogło spowodować niepowodzenie wypychania, gdy pilot jest ustawiony na https, ale to było rozwiązanie mojego problemu

PhilVarg
źródło
BŁĄD: Pozwolenie na unrealcv / syntetyczne-komputerowe-widzenie.git denied to monajalal. krytyczny: nie można odczytać ze zdalnego repozytorium. Upewnij się, że masz odpowiednie prawa dostępu i repozytorium istnieje.
Mona Jalal
1

Miałem ten sam problem co Ty. Po długim czasie spędzonym na wyszukiwaniu w Google odkryłem, że mój błąd był spowodowany przez wielu użytkowników, którzy dodali ten sam klucz do swoich kont.

Oto moje rozwiązanie: usuń klucz ssh niewłaściwego użytkownika (mogę to zrobić, ponieważ zły użytkownik jest również moim kontem). Jeśli niewłaściwy użytkownik nie jest Twoim kontem, być może będziesz musiał zmienić swój klucz SSH, ale nie sądzę, aby to się stało.

Myślę, że przyczyną problemu może być błędny wpis w nazwie Twojego konta.

Perth Charles
źródło
0

Ten problem jest również spowodowany:

Jeśli korzystasz z Maca / Linuksa i używasz 'ControlMaster' w swoim ~ / .ssh / config, może być uruchomionych kilka głównych procesów sterujących ssh.

Aby je znaleźć, biegnij:

ps aux | grep '\[mux\]'

I zabij odpowiednich.

Grzmotnąć
źródło
0

Ja też natknąłem się na to, co spowodowało to dla mnie, że podczas klonowania repozytorium, do którego wysyłałem swoje zmiany, podniosłem klonowany adres URL z karty incognito bez logowania się. (Nadal nie mam pojęcia, jak to działa). To z jakiegoś powodu doprowadziło do wybrania innego konta użytkownika. Kiedy spróbowałem ponownie z prawidłowo zalogowanej strony, działało jak zwykle.

rajoriav
źródło
0

Napotkałem ten błąd podczas używania Travis CI do wdrażania treści , co wiązało się z przesyłaniem zmian do repozytorium.

Ostatecznie rozwiązałem problem, aktualizując osobisty token dostępu GitHub powiązany z kontem Travis z public_repouprawnieniem dostępu do zakresu:

Wybierz <code> public_repo </code>

ms609
źródło