Početna
» Osnovno znanje
»
Kako popraviti "Dozvola odbijena (javni ključ)" u GitHub SSH-u
Kako popraviti "Dozvola odbijena (javni ključ)" u GitHub SSH-u
GitHubova trenutna dokumentacija za rješavanje problema s SSH-om, provjerena 13. rujna 2026., i dalje tretira Permission denied (publickey)kao neuspjeh autentifikacije: GitHub je odbio SSH vezu jer nije prihvatio upotrebljiv javni ključ za račun i vezu koju ste predstavili. Najbrži način za rješavanje problema je provjera veze određenim redoslijedom umjesto trenutnog brisanja ključeva ili generiranja novih. Službena stranica za rješavanje problema GitHub-a za odbijen pristup (javni ključ) preporučuje provjeru poslužitelja, SSH korisnika, ponuđenog ključa i je li odgovarajući javni ključ pridružen vašem računu.
Dobar popravak ima dva vidljiva ishoda. Prvo, ssh -T git@github.comidentificira GitHub račun koji ste namjeravali koristiti i izvještava o uspješnoj autentifikaciji. Drugo, stvarna naredba repozitorija - kao što je git fetch, git pull, git pushili git clone- radi s repozitorijem kojem imate ovlaštenje pristupiti. Prolaskom samo prvog testa dokazuje se SSH autentifikacija, a ne dopuštenje za repozitorij.
Brza dijagnostička kontrolna lista
Provjeriti
Zdrav rezultat
Ako ne uspije
Udaljeni URL
Upotrebagit@github.com:OWNER/REPOSITORY.git
Ispravite hosta ili SSH korisnika prije promjene ključeva
Lokalne ključne datoteke
Postoji podržani par javnog/privatnog ključa
Generirajte novi par ključeva samo ako nemate onaj koji namjeravate koristiti
SSH agent
ssh-add -l -E sha256navodi namjeravani ključ
Pokrenite agenta i dodajte privatni ključ
GitHub račun
Odgovarajući javni ključ pojavljuje se pod SSH i GPG ključevima
Dodajte javni ključ ispravnom računu; autorizirajte ga za SSO kada je to potrebno
Test autentifikacije
GitHub pozdravlja očekivano korisničko ime
Koristite detaljan SSH izlaz kako biste vidjeli koji se ključ zapravo nudi
Rad repozitorija
Dohvaćanje, povlačenje, guranje ili kloniranje je uspješno
Provjerite pristup repozitoriju, identitet računa, jednokratnu prijavu (SSO), udaljeni URL ili mrežna ograničenja
1. Provjerite odredište, SSH korisnika i udaljeni URL
Prije nego što dodirnete tipke, potvrdite da se spajate na GitHub.com i da je SSH korisničko ime doslovno git. GitHub dokumentira da SSH veze na GitHub.com moraju koristiti korisnika, a ne vaše osobno GitHub korisničko ime. Očekuje se da će gitnaredba poput ne uspjeti.ssh -T yourname@github.com
git remote -v
ssh -vT git@github.com
Za normalni GitHub.com SSH daljinski upravljač, URL bi trebao izgledati ovako:
git@github.com:OWNER/REPOSITORY.git
Ako je daljinski upravljač pogrešan, ispravite ga pomoću Gitove konfiguracije daljinskog upravljača umjesto ponovnog generiranja vjerodajnica:
Također izbjegavajte pokretanje običnih Git naredbi s sudoili s povećanim privilegijama. GitHub napominje da to može uzrokovati da Git radi u drugom korisničkom okruženju i stoga koristi drugačije SSH ključeve od onih koje ste konfigurirali. Cilj u ovoj fazi je jednostavan: detaljan izlaz trebao bi prikazati pokušaj povezivanja na github.comportu 22, osim ako niste namjerno konfigurirali zaobilazno rješenje HTTPS porta opisano kasnije.
2. Potvrdite da postoji upotrebljiv ključ i da je učitan
Prije nego što stvorite nešto novo, provjerite svoj lokalni SSH direktorij. Trenutne smjernice GitHuba preporučuju da prvo potražite postojeći podržani par ključeva.
ls -al ~/.ssh
Prije generiranja novog ključa provjerite SSH direktorij za odgovarajući par privatnog i javnog ključa.
Uobičajeni zadani nazivi datoteka javnog ključa uključuju id_ed25519.pub, id_ecdsa.pubi id_rsa.pub. GitHub više ne podržava DSA ključeve. Ako već imate par ključeva koji namjeravate koristiti za GitHub, zadržite ga i nastavite s provjerom agenta.
ssh-add -l -E sha256
Ispravan rezultat navodi jedan ili više otisaka prstiju. Ako željeni ključ nije učitan, pokrenite SSH agent prema potrebi za vaše okruženje i dodajte privatni ključ:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
Učitajte privatni ključ u ssh-agent kako bi ga SSH klijent mogao ponuditi tijekom GitHub autentifikacije.
U sustavu Windows, točna naredba agent-start ovisi o tome koristite li Git Bash, Windows OpenSSH, PowerShell ili neko drugo okruženje. Službeni vodič za generiranje ključeva i ssh-agent na GitHubu pruža upute specifične za platformu. Slijedite odjeljak za SSH klijent koji zapravo koristite; miješanje Gitovog SSH-a za Windows s Windows OpenSSH-om čest je izvor zabune.
Ako nemate par ključeva
Generirajte ga samo kada prethodna provjera pokaže da nemate odgovarajući ključ koji želite koristiti. Trenutne upute GitHuba preporučuju Ed25519 za standardni softverski ključ kada je podržan:
ssh-keygen -t ed25519 -C "your_email@example.com"
Koristite lozinku ako odgovara vašim sigurnosnim zahtjevima. SSH agent može pohraniti otključani privatni ključ u predmemoriju za vašu sesiju. Nikada ne prenosite niti lijepite samu datoteku privatnog ključa u GitHub; datoteka koja završava na .pubje javni ključ namijenjen za registraciju računa.
Nije dovoljno imati lokalni ključ. GitHub mora imati odgovarajući javni ključ povezan s računom koji treba autentificirati. Prikažite javni ključ, a zatim kopirajte cijeli redak:
cat ~/.ssh/id_ed25519.pub
U GitHubu otvorite Postavke , zatim SSH i GPG ključeve , odaberite Novi SSH ključ ili Dodaj SSH ključ , odaberite ključ za autentifikaciju i zalijepite javni ključ. Ove oznake odgovaraju trenutnoj službenoj dokumentaciji GitHuba za dodavanje SSH ključa .
Dodajte javni ključ, a ne privatni ključ, GitHub računu koji bi trebao autentificirati SSH vezu.
Usporedite otiske prstiju kada niste sigurni koji lokalni ključ odgovara unosu na GitHubu:
ssh-add -l -E sha256
Ako repozitorij pripada organizaciji koja koristi SAML jednokratnu prijavu, dodavanje ključa vašem računu možda neće biti dovoljno. GitHub dokumentira da SSH ključ također može zahtijevati autorizaciju organizacije. U Postavkama > SSH i GPG ključevi upotrijebite Konfiguriraj SSO za ključ i autorizirajte relevantnu organizaciju kada je ta kontrola dostupna. Pogledajte GitHubov vodič za autorizaciju SSO ključa za SSH .
4. Testirajte autentifikaciju neovisno o Gitu
Ne koristite git pushkao jedini test. Testirajte SSH izravno:
ssh -T git@github.com
Uspješan SSH test identificira autentificirani GitHub račun i potvrđuje da razmjena ključeva funkcionira.
Poruka o uspjehu trebala bi pozdraviti vaše korisničko ime na GitHubu i objasniti da GitHub ne omogućuje pristup ljusci. GitHub također napominje da se ovaj test može završiti sa statusnim kodom 1 čak i kada autentifikacija uspije, stoga ga procijenite prema poruci o autentifikaciji umjesto da očekujete normalnu interaktivnu ljusku.
Ako test i dalje završava u Permission denied (publickey), pokrenite opširni način rada:
ssh -vT git@github.com
Potražite retke poput Offering public key. Ako zapisnik nikada ne ponudi ključ koji ste očekivali, problem je u lokalnom odabiru ključa ili konfiguraciji agenta. Ako je željeni ključ ponuđen, ali odbijen, provjerite je li taj javni ključ pridružen ispravnom GitHub računu i je li potrebna SSO autorizacija.
Više GitHub računa: provjerite koji se identitet zapravo koristi
Ako koristite poslovne i osobne račune na istom računalu, uspješna SSH autentifikacija i dalje može završiti na pogrešnom računu. GitHub dokumentira korištenje IdentitiesOnly=yesili određenu datoteku identiteta za kontrolu ključa koji SSH nudi. Za jednokratnu dijagnostiku:
Ako GitHub primi pogrešno korisničko ime, pronašli ste neusklađenost. Konfigurirajte odvojene ključeve ili aliase hosta umjesto da ih opetovano brišete i ponovno dodajete. Službeni vodič za više računa GitHuba detaljnije pokriva ovaj slučaj.
5. Ponovno pokušajte naredbu repozitorija, a zatim promijenite pristup samo ako dokazi upućuju na nešto drugo
Nakon što ssh -T git@github.comse autentificira kao očekivani korisnik, ponovno pokušajte stvarnu operaciju repozitorija:
git fetch origin
git pull
git push
Završna provjera kvalitete je prava Git operacija: uspješna autentifikacija trebala bi se prevesti u uspješan pristup repozitoriju kada račun ima dopuštenje.
Ako SSH autentifikacija uspije, ali Git sada prijavi grešku dozvole specifične za repozitorij, prestanite mijenjati SSH ključ. U tom trenutku ključ je već obavio svoj posao. Provjerite ima li autentificirani račun pristup repozitoriju, jesu li vlasnik i naziv repozitorija u udaljenom URL-u ispravni i je li organizacija dodijelila potrebnu ulogu. GitHubova zasebna stranica za rješavanje problema s dozvolama repozitorija objašnjava slučaj u kojem ključ pripada računu bez pristupa.
Ako je port 22 blokiran
Vatrozid ili proxy mogu spriječiti valjanu SSH postavku da dođe do GitHuba na portu 22. Testirajte GitHubovu dokumentiranu krajnju točku SSH-over-HTTPS:
ssh -T -p 443 git@ssh.github.com
Naziv hosta je ssh.github.com, a ne github.com, za ovaj izravni test porta-443. Ako radi, GitHub dokumentira ovu SSH konfiguraciju:
Host github.com
Hostname ssh.github.com
Port 443
User git
Zatim ponovno testirajte s ssh -T git@github.com. Pogledajte GitHubov vodič za SSH preko porta 443. Ovo zaobilazno rješenje ne odnosi se na svako GitHub Enterprise okruženje, a proxy poslužitelji i dalje mogu ometati.
Kako znati kada prestati pokušavati s istim rješenjem
Ono što opažate
Što to znači
Sljedeći potez
ssh-add -lne prikazuje namjeravani ključ
Klijent ne može ponuditi ispravan privatni ključ
Ispravite agenta ili put ključa
Opširni SSH se nikad ne prikazuje Offering public keyza željeni ključ
GitHub ne prihvaća taj ključ za pokušani identitet
Provjerite preneseni javni ključ, ciljni račun i SSO autorizaciju
SSH pozdravlja pogrešno korisničko ime na GitHubu
Koristi se ključ drugog računa
Odvojite ključeve računa i eksplicitno odaberite željeni identitet
SSH uspijeva, ali repozitorij odbija push ili fetch
Autentifikacija radi; problem je sada u autorizaciji repozitorija ili URL-u.
Provjerite pristup repozitoriju i udaljeno vlasništvo
Port 22 se uopće ne može spojiti
Mreža možda blokira standardni SSH
Testirajte port 443 ili koristite HTTPS
Uobičajeni popravci koji često gube vrijeme
Generiranje ključa za ključem bez provjere što SSH nudi. Više ključeva može otežati odabir. Prvo koristite ssh -vTi ssh-add -l -E sha256.
Korištenje vašeg GitHub korisničkog imena prije @github.com. GitHubova SSH krajnja točka očekuje SSH korisnika git. Vaš GitHub identitet određen je javnim ključem koji GitHub prepoznaje.
Prijenos privatnog ključa. Nemojte to raditi. GitHub treba javnu .pubvrijednost; privatni ključ ostaje na vašem računalu ili odobrenom mjestu za pohranu ključeva.
Pod pretpostavkom uspješnog SSH testa jamči se push pristup. To dokazuje autentifikaciju računa. Autorizacija repozitorija je zasebna provjera.
Ignoriranje SSO-a. Resursi organizacije mogu zahtijevati dodatnu autorizaciju SSH ključem čak i kada je ključ prisutan na vašem osobnom računu.
Korištenje povišenih Git naredbi. Pokretanje Gita kao drugi OS korisnik može promijeniti koji se početni direktorij, SSH konfiguracija, agent i ključevi koriste.
Kada je HTTPS bolje rješenje
SSH nije obavezan. GitHub također podržava HTTPS daljinske uređaje. Ako zaključana korporativna mreža, politika upravljanih krajnjih točaka ili proxy čine SSH nepraktičnim, prebacivanje udaljenog repozitorija na HTTPS može biti jednostavnije nego borba protiv mreže. To je promjena metode autentifikacije, a ne popravak SSH konfiguracije, stoga ga koristite kada vaše okruženje čini SSH nepoželjnim, a ne kao način skrivanja neriješene neusklađenosti ključeva.
Za SSH, najpouzdanija točka zaustavljanja temelji se na dokazima: očekivani ključ je učitan, GitHub ga prepoznaje kao očekivani račun, organizacija ga autorizira kada je potrebno i stvarna Git operacija uspijeva. Ako jedna od tih provjera ne uspije, promijenite samo sloj koji nije uspio. To kontrolira proces rješavanja problema i izbjegava nepotrebnu zamjenu radnih ključeva.