Domov
» Základné znalosti
»
Ako opraviť chybu „Oprávnenie zamietnuté (verejný kľúč)“ v GitHub SSH
Ako opraviť chybu „Oprávnenie zamietnuté (verejný kľúč)“ v GitHub SSH
Aktuálna dokumentácia GitHubu o riešení problémov s SSH, skontrolovaná 13. septembra 2026, stále považuje problém Permission denied (publickey)za zlyhanie overenia: GitHub odmietol pripojenie SSH, pretože neakceptoval použiteľný verejný kľúč pre účet a pripojenie, ktoré ste prezentovali. Najrýchlejší spôsob, ako to opraviť, je overiť pripojenie v konkrétnom poradí namiesto okamžitého mazania kľúčov alebo generovania nových. Oficiálna stránka GitHubu o riešení problémov s odmietnutím prístupu (verejný kľúč) odporúča skontrolovať server, používateľa SSH, ponúkaný kľúč a to, či je k vášmu účtu pripojený zodpovedajúci verejný kľúč.
Dobrá oprava má dva pozorovateľné výsledky. Po prvé, ssh -T git@github.comidentifikuje účet GitHub, ktorý ste chceli použiť, a oznámi úspešné overenie. Po druhé, samotný príkaz repozitára – napríklad git fetch, git pull, git pushalebo git clone– funguje s repozitárom, ku ktorému máte oprávnenie pristupovať. Úspešné absolvovanie iba prvého testu preukáže overenie SSH, nie povolenie prístupu k repozitáru.
Rýchly diagnostický kontrolný zoznam
Skontrolovať
Zdravý výsledok
Ak zlyhá
Vzdialená URL adresa
Použitiegit@github.com:OWNER/REPOSITORY.git
Pred zmenou kľúčov opravte hostiteľa alebo používateľa SSH
Lokálne kľúčové súbory
Existuje podporovaný pár verejného/súkromného kľúča
Nový pár kľúčov vygenerujte iba v prípade, že ešte nemáte taký, ktorý chcete použiť.
SSH agent
ssh-add -l -E sha256uvádza zamýšľaný kľúč
Spustite agenta a pridajte súkromný kľúč
Účet na GitHube
Zodpovedajúci verejný kľúč sa zobrazí pod kľúčmi SSH a GPG.
Pridajte verejný kľúč k správnemu účtu a v prípade potreby ho autorizujte pre SSO.
Autentifikačný test
GitHub víta očakávané používateľské meno
Použite podrobný výstup SSH na zistenie, ktorý kľúč je skutočne ponúkaný
Prevádzka úložiska
Úspešné načítanie, stiahnutie, vloženie alebo klonovanie
Skontrolujte prístup k úložisku, identitu účtu, jednorazové prihlásenie (SSO), vzdialenú URL adresu alebo sieťové obmedzenia
1. Overte cieľ, používateľa SSH a vzdialenú URL adresu
Predtým, ako sa dotknete klávesov, overte si, či sa pripájate na GitHub.com a či je používateľské meno SSH doslova git. GitHub dokumentuje, že pripojenia SSH na GitHub.com musia používať gitpoužívateľa, nie vaše osobné používateľské meno GitHub. Očakáva sa, že príkaz ako ssh -T yourname@github.comzlyhá.
git remote -v
ssh -vT git@github.com
Pre bežné SSH vzdialené ovládanie z GitHub.com by URL adresa mala vyzerať takto:
git@github.com:OWNER/REPOSITORY.git
Ak je vzdialené ovládanie nesprávne, opravte ho pomocou konfigurácie vzdialeného ovládania v Gite, namiesto opätovného generovania prihlasovacích údajov:
Taktiež sa vyhnite spúšťaniu bežných príkazov Gitu s oprávneniami sudoalebo so zvýšenými oprávneniami. GitHub poznamenáva, že to môže spôsobiť, že Git bude bežať v inom používateľskom prostredí, a preto bude používať iné kľúče SSH, ako tie, ktoré ste nakonfigurovali. Cieľ v tejto fáze je jednoduchý: podrobný výstup by mal zobrazovať pokus o pripojenie na github.comporte 22, pokiaľ ste zámerne nenakonfigurovali riešenie pre port HTTPS, ktoré je opísané neskôr.
2. Potvrďte, že existuje a je načítaný použiteľný kľúč
Pred vytvorením čohokoľvek nového si skontrolujte lokálny adresár SSH. Aktuálne pokyny GitHubu odporúčajú najskôr vyhľadať existujúci podporovaný pár kľúčov.
ls -al ~/.ssh
Pred vygenerovaním ďalšieho kľúča skontrolujte adresár SSH, či sa v ňom nenachádza zodpovedajúci pár súkromného a verejného kľúča.
Medzi bežné predvolené názvy súborov s verejnými kľúčmi patria id_ed25519.pub, id_ecdsa.puba id_rsa.pub. GitHub už nepodporuje kľúče DSA. Ak už máte pár kľúčov, ktorý chcete použiť pre GitHub, ponechajte si ho a pokračujte v kontrole agenta.
ssh-add -l -E sha256
V poriadku sa zobrazí jeden alebo viac odtlačkov prstov. Ak požadovaný kľúč nie je načítaný, spustite agenta SSH podľa potreby pre vaše prostredie a pridajte súkromný kľúč:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
Načítajte súkromný kľúč do ssh-agent, aby ho SSH klient mohol ponúknuť počas autentifikácie GitHub.
V systéme Windows závisí presný príkaz agent-start od toho, či používate Git Bash, Windows OpenSSH, PowerShell alebo iné prostredie. Oficiálna príručka GitHub pre generovanie kľúčov a ssh-agent poskytuje pokyny špecifické pre platformu. Postupujte podľa časti pre klienta SSH, ktorého skutočne používate; miešanie SSH z Gitu pre Windows s Windows OpenSSH je častým zdrojom zmätku.
Ak nemáte pár kľúčov
Vygenerujte ho iba vtedy, keď predchádzajúca kontrola ukáže, že nemáte vhodný kľúč, ktorý chcete použiť. Aktuálne pokyny GitHubu odporúčajú Ed25519 ako štandardný softvérový kľúč, ak je podporovaný:
ssh-keygen -t ed25519 -C "your_email@example.com"
Použite prístupovú frázu, ak vyhovuje vašim bezpečnostným požiadavkám. Agent SSH môže uložiť odomknutý súkromný kľúč do vyrovnávacej pamäte pre vašu reláciu. Nikdy nenahrávajte ani nevkladajte samotný súbor so súkromným kľúčom do GitHubu; súbor končiaci na .pubje verejný kľúč určený na registráciu účtu.
3. Pripojte zodpovedajúci verejný kľúč k správnemu účtu GitHub
Mať lokálny kľúč nestačí. GitHub musí mať zodpovedajúci verejný kľúč priradený k účtu, ktorý sa má overiť. Zobrazte verejný kľúč a potom skopírujte celý riadok:
cat ~/.ssh/id_ed25519.pub
V GitHube otvorte Nastavenia , potom Kľúče SSH a GPG , vyberte Nový kľúč SSH alebo Pridať kľúč SSH , vyberte autentifikačný kľúč a vložte verejný kľúč. Tieto označenia zodpovedajú aktuálnej oficiálnej dokumentácii GitHubu o pridaní kľúča SSH .
Pridajte verejný kľúč – nie súkromný kľúč – k účtu GitHub, ktorý by mal overiť SSH pripojenie.
Porovnajte odtlačky prstov, ak si nie ste istí, ktorý lokálny kľúč zodpovedá záznamu na GitHube:
ssh-add -l -E sha256
Ak repozitár patrí organizácii, ktorá používa jednotné prihlásenie SAML, pridanie kľúča k vášmu účtu nemusí stačiť. GitHub dokumentuje, že kľúč SSH môže tiež vyžadovať autorizáciu organizácie. V časti Nastavenia > Kľúče SSH a GPG použite pre kľúč možnosť Konfigurovať SSO a autorizujte príslušnú organizáciu, keď je táto kontrola k dispozícii. Pozrite si sprievodcu autorizáciou kľúča SSH SSO na GitHube .
4. Testovanie autentifikácie nezávisle od Gitu
Nepoužívajte git pushako jediný test. Otestujte SSH priamo:
ssh -T git@github.com
Úspešný SSH test identifikuje overený účet GitHub a potvrdí, že výmena kľúčov funguje.
Správa o úspechu by mala privítať vaše používateľské meno na GitHube a vysvetliť, že GitHub neposkytuje prístup k shellu. GitHub tiež poznamenáva, že tento test môže skončiť so stavovým kódom 1, aj keď je autentifikácia úspešná, takže ho posudzujte podľa správy o autentifikácii, a nie očakávajte normálny interaktívny shell.
Ak test stále končí v Permission denied (publickey), spustite podrobný režim:
ssh -vT git@github.com
Hľadajte riadky ako Offering public key. Ak protokol nikdy neponúka očakávaný kľúč, problém je vo výbere lokálneho kľúča alebo v konfigurácii agenta. Ak je zamýšľaný kľúč ponúknutý, ale odmietnutý, skontrolujte, či je daný verejný kľúč pripojený k správnemu účtu GitHub a či je potrebné autorizovanie SSO.
Viaceré účty GitHub: overenie, ktorá identita sa skutočne používa
Ak používate pracovné aj osobné účty na tom istom počítači, úspešné overenie SSH môže stále viesť k nesprávnemu účtu. Dokumenty GitHubu používajúce IdentitiesOnly=yeskonkrétny súbor identity na kontrolu, ktorý kľúč SSH ponúka. Pre jednorazovú diagnostiku:
Ak GitHub privíta nesprávne používateľské meno, zistili ste nezhodu. Namiesto opakovaného mazania a opätovného pridávania kľúčov nakonfigurujte samostatné kľúče alebo aliasy hostiteľa. Tento prípad podrobnejšie popisuje oficiálny sprievodca GitHubu pre viacero účtov .
5. Zopakujte príkaz repozitára a potom zmeňte prístup iba v prípade, že dôkazy ukazujú inde.
Po ssh -T git@github.comoverení ako očakávaný používateľ zopakujte skutočnú operáciu s úložiskom:
git fetch origin
git pull
git push
Záverečná kontrola kvality je skutočnou operáciou systému Git: úspešná autentifikácia by sa mala premietnuť do úspešného prístupu k repozitáru, ak má účet povolenie.
Ak je autentifikácia SSH úspešná, ale Git teraz hlási chybu oprávnení špecifických pre repozitár, prestaňte meniť kľúč SSH. V tomto bode kľúč už vykonal svoju úlohu. Overte, či má overený účet prístup k repozitáru, či sú vlastník a názov repozitára vo vzdialenej URL adrese správne a či organizácia udelila požadovanú rolu. Samostatná stránka GitHub pre riešenie problémov s oprávneniami pre repozitár vysvetľuje prípad, keď kľúč patrí účtu bez prístupu.
Ak je port 22 blokovaný
Firewall alebo proxy môže zabrániť platnému nastaveniu SSH v prístupe k GitHubu na porte 22. Otestujte zdokumentovaný koncový bod SSH cez HTTPS na GitHube:
ssh -T -p 443 git@ssh.github.com
Názov hostiteľa je ssh.github.com, nie github.com, pre tento priamy test portu 443. Ak to funguje, GitHub dokumentuje túto konfiguráciu SSH:
Host github.com
Hostname ssh.github.com
Port 443
User git
Potom to znova otestujte s ssh -T git@github.com. Pozrite si sprievodcu GitHub SSH cez port 443. Toto riešenie sa nevzťahuje na každé prostredie GitHub Enterprise a proxy servery môžu stále rušiť.
Ako vedieť, kedy prestať skúšať tú istú opravu
Čo pozorujete
Čo to znamená
Ďalší krok
ssh-add -lnezobrazuje žiadny zamýšľaný kľúč
Klient nemôže ponúknuť správny súkromný kľúč
Opravte agenta alebo cestu ku kľúču
Podrobný SSH sa nikdy nezobrazí Offering public keypre zamýšľaný kľúč
GitHub neakceptuje tento kľúč pre pokúšanú identitu
Skontrolujte nahraný verejný kľúč, cieľový účet a autorizáciu SSO
SSH víta nesprávne používateľské meno GitHubu
Používa sa kľúč iného účtu
Oddeľte kľúče účtov a explicitne vyberte zamýšľanú identitu
SSH je úspešné, ale repozitár odmieta push alebo fetch
Autentifikácia funguje; problémom je teraz autorizácia úložiska alebo URL adresa.
Skontrolujte prístup k úložisku a vzdialené vlastníctvo
Port 22 sa vôbec nedá pripojiť
Sieť môže blokovať štandardné SSH
Otestujte port 443 alebo použite HTTPS
Bežné opravy, ktoré často strácajú čas
Generovanie kľúča za kľúčom bez kontroly, čo SSH ponúka. Viac kľúčov môže sťažiť výber. Najprv použite ssh -vTa ssh-add -l -E sha256.
Používate svoje používateľské meno GitHub pred @github.com. Koncový bod SSH GitHubu očakáva používateľa SSH git. Vaša identita GitHubu je určená verejným kľúčom, ktorý GitHub rozpozná.
Nahráva sa súkromný kľúč. Nerobte to. GitHub potrebuje verejnú .pubhodnotu; súkromný kľúč zostáva na vašom počítači alebo v schválenom úložisku kľúčov.
Za predpokladu úspešného SSH testu je zaručený push prístup. Preukazuje autentifikáciu účtu. Autorizácia repozitára je samostatná kontrola.
Ignorovanie SSO. Prostriedky organizácie môžu vyžadovať dodatočnú autorizáciu pomocou SSH kľúča, aj keď je kľúč prítomný vo vašom osobnom účte.
Používanie príkazov Git s oprávneniami. Spustenie Gitu ako iný používateľ operačného systému môže zmeniť, ktorý domovský adresár, konfigurácia SSH, agent a kľúče sa používajú.
Kedy je HTTPS lepšou odpoveďou
SSH nie je povinné. GitHub podporuje aj vzdialené pripojenia HTTPS. Ak je SSH nepraktické kvôli uzamknutej firemnej sieti, politike spravovaných koncových bodov alebo proxy, prepnutie vzdialeného pripojenia repozitára na HTTPS môže byť jednoduchšie ako bojovať so sieťou. Ide o zmenu metódy overovania, nie o opravu konfigurácie SSH, takže ho použite, keď je vaše prostredie nežiaduce, a nie ako spôsob, ako skryť nevyriešený nesúlad kľúčov.
Pre SSH je najspoľahlivejším bodom zastavenia založený na dôkazoch: očakávaný kľúč je načítaný, GitHub ho rozpozná ako očakávaný účet, organizácia ho v prípade potreby autorizuje a skutočná operácia Git je úspešná. Ak jedna z týchto kontrol zlyhá, zmeňte iba vrstvu, ktorá zlyhala. To udrží proces riešenia problémov pod kontrolou a zabráni zbytočnému nahrádzaniu funkčných kľúčov.