Kā GitHub SSH novērst kļūdu "Atļauja liegta (publiskā atslēga)"
GitHub pašreizējā SSH problēmu novēršanas dokumentācija, kas pārbaudīta 2026. gada 13. septembrī, joprojām tiek uzskatīta Permission denied (publickey)par autentifikācijas kļūmi: GitHub noraidīja SSH savienojumu, jo tas nepieņēma izmantojamu publisko atslēgu jūsu norādītajam kontam un savienojumam. Ātrākais veids, kā to labot, ir pārbaudīt savienojumu noteiktā secībā, nevis nekavējoties dzēst atslēgas vai ģenerēt jaunas. GitHub oficiālajā atļaujas liegšanas (publiskās atslēgas) problēmu novēršanas lapā ieteicams pārbaudīt serveri, SSH lietotāju, piedāvāto atslēgu un to, vai atbilstošā publiskā atslēga ir pievienota jūsu kontam.
Labam remontam ir divi novērojami rezultāti. Pirmkārt, ssh -T git@github.comtas identificē GitHub kontu, kuru plānojāt izmantot, un ziņo par veiksmīgu autentifikāciju. Otrkārt, faktiskā repozitorija komanda — piemēram git fetch, git pull, git push, vai git clone— darbojas ar repozitoriju, kuram jums ir atļauja piekļūt. Tikai pirmā testa nokārtošana apliecina SSH autentifikāciju, nevis repozitorija atļauju.
Ātrās diagnostikas kontrolsaraksts
Pārbaudiet
Veselīgs rezultāts
Ja tas neizdodas
Attālais URL
Lietošanagit@github.com:OWNER/REPOSITORY.git
Pirms atslēgu maiņas izlabojiet resursdatora vai SSH lietotāja datus
Lokālie atslēgu faili
Pastāv atbalstīts publisko/privāto atslēgu pāris
Ģenerējiet jaunu atslēgu pāri tikai tad, ja jums nav tāda, ko plānojat izmantot.
SSH aģents
ssh-add -l -E sha256norāda paredzēto atslēgu
Palaidiet aģentu un pievienojiet privāto atslēgu
GitHub konts
Atbilstošā publiskā atslēga parādās zem SSH un GPG atslēgām.
Pievienojiet publisko atslēgu pareizajam kontam; autorizējiet to vienreizējai ieslēgšanai (SSO), ja nepieciešams.
Autentifikācijas pārbaude
GitHub sagaida gaidīto lietotājvārdu
Izmantojiet detalizētu SSH izvadi, lai redzētu, kura atslēga faktiski tiek piedāvāta.
Repozitorija darbība
Iegūt, vilkt, sūtīt vai klonēt izdodas
Pārbaudiet piekļuvi krātuvei, konta identitāti, SSO, attālo URL vai tīkla ierobežojumus.
1. Pārbaudiet galamērķi, SSH lietotāju un attālo URL
Pirms taustiņu aizskaršanas pārliecinieties, vai veidojat savienojumu ar GitHub.com un vai SSH lietotājvārds ir burtiski git. GitHub dokumentē, ka SSH savienojumiem ar GitHub.com ir jāizmanto lietotājs git, nevis jūsu personīgais GitHub lietotājvārds. Tāda komanda kā , ssh -T yourname@github.comdomājams, neizdosies.
git remote -v
ssh -vT git@github.com
Parasta GitHub.com SSH tālvadības pults URL adresei vajadzētu izskatīties šādi:
git@github.com:OWNER/REPOSITORY.git
Ja tālvadības pults ir nepareiza, izlabojiet to ar Git tālvadības pults konfigurāciju, nevis atkārtoti ģenerējiet akreditācijas datus:
Tāpat izvairieties palaist parastas Git komandas ar sudovai paaugstinātām privilēģijām. GitHub norāda, ka, to darot, Git var darboties citā lietotāja vidē un līdz ar to izmantot citas SSH atslēgas, nevis tās, kuras konfigurējāt. Šajā posmā mērķis ir vienkāršs: detalizētai izvadei vajadzētu parādīt savienojuma mēģinājumu github.com22. portā, ja vien jūs apzināti nekonfigurējāt HTTPS porta risinājumu, kas aprakstīts tālāk.
2. Pārliecinieties, vai pastāv un ir ielādēta izmantojama atslēga.
Pirms jebkādu jaunu failu izveides pārbaudiet savu lokālo SSH direktoriju. GitHub pašreizējās vadlīnijas iesaka vispirms meklēt esošu atbalstītu atslēgu pāri.
ls -al ~/.ssh
Pirms citas atslēgas ģenerēšanas pārbaudiet SSH direktoriju, vai tajā nav atbilstoša privātās atslēgas un publiskās atslēgas pāra.
Bieži sastopamie noklusējuma publiskās atslēgas failu nosaukumi ir id_ed25519.pub, id_ecdsa.pubun id_rsa.pub. GitHub vairs neatbalsta DSA atslēgas. Ja jums jau ir atslēgu pāris, ko plānojat izmantot GitHub, saglabājiet to un turpiniet aģenta pārbaudi.
ssh-add -l -E sha256
Veselīgs rezultāts uzrāda vienu vai vairākus pirkstu nospiedumus. Ja paredzētā atslēga netiek ielādēta, startējiet SSH aģentu atbilstoši jūsu videi un pievienojiet privāto atslēgu:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
Ielādējiet privāto atslēgu ssh-agent, lai SSH klients to varētu piedāvāt GitHub autentifikācijas laikā.
Operētājsistēmā Windows precīza agent-start komanda ir atkarīga no tā, vai izmantojat Git Bash, Windows OpenSSH, PowerShell vai citu vidi. GitHub oficiālajā atslēgu ģenerēšanas un ssh-agent rokasgrāmatā ir sniegti platformai specifiski norādījumi. Izpildiet sadaļu par SSH klientu, kuru faktiski izmantojat; Git for Windows SSH jaukšana ar Windows OpenSSH ir bieži sastopams apjukuma avots.
Ja jums nav atslēgu pāra
Ģenerējiet to tikai tad, ja iepriekšējā pārbaude parāda, ka jums nav piemērotas atslēgas, ko vēlaties izmantot. GitHub pašreizējās instrukcijas iesaka Ed25519 kā standarta programmatūras atslēgu, ja tāda tiek atbalstīta:
ssh-keygen -t ed25519 -C "your_email@example.com"
Izmantojiet paroli, ja tā atbilst jūsu drošības prasībām. SSH aģents var kešatmiņā saglabāt atbloķēto privāto atslēgu jūsu sesijai. Nekad neaugšupielādējiet un neielīmējiet pašu privātās atslēgas failu GitHub; fails, kas beidzas ar , .pubir publiskā atslēga, kas paredzēta konta reģistrācijai.
Ar lokālo atslēgu vien nepietiek. GitHub ir jābūt atbilstošajai publiskajai atslēgai, kas saistīta ar kontu, kuram jāveic autentifikācija. Parādiet publisko atslēgu un pēc tam nokopējiet visu rindu:
cat ~/.ssh/id_ed25519.pub
GitHub platformā atveriet Iestatījumi , pēc tam SSH un GPG atslēgas , izvēlieties Jauna SSH atslēga vai Pievienot SSH atslēgu , atlasiet autentifikācijas atslēgu un ielīmējiet publisko atslēgu. Šīs etiķetes atbilst GitHub pašreizējai oficiālajai SSH atslēgas pievienošanas dokumentācijai .
Pievienojiet publisko atslēgu, nevis privāto atslēgu, GitHub kontam, kuram jāautentificē SSH savienojums.
Salīdziniet pirkstu nospiedumus, ja neesat pārliecināts, kura lokālā atslēga atbilst ierakstam vietnē GitHub:
ssh-add -l -E sha256
Ja repozitorijs pieder organizācijai, kas izmanto SAML vienreizējo pierakstīšanos, atslēgas pievienošana jūsu kontam var nebūt pietiekama. GitHub dokumentē, ka SSH atslēgai var būt nepieciešama arī organizācijas autorizācija. Sadaļā Iestatījumi > SSH un GPG atslēgas izmantojiet atslēgas konfigurēšanas opciju “Konfigurēt SSO” un autorizējiet attiecīgo organizāciju, ja šī kontrole ir pieejama. Skatiet GitHub SSH atslēgas SSO autorizācijas rokasgrāmatu .
4. Pārbaudiet autentifikāciju neatkarīgi no Git
Neizmantojiet git pushkā vienīgo testu. Pārbaudiet SSH tieši:
ssh -T git@github.com
Veiksmīgs SSH tests identificē autentificēto GitHub kontu un apstiprina, ka atslēgu apmaiņa darbojas.
Veiksmes ziņojumam vajadzētu sveicināt jūsu GitHub lietotājvārdu un paskaidrot, ka GitHub nenodrošina piekļuvi čaulai. GitHub arī norāda, ka šis tests var beigties ar statusa kodu 1 pat tad, ja autentifikācija ir veiksmīga, tāpēc spriediet par to pēc autentifikācijas ziņojuma, nevis sagaidot parastu interaktīvu čaulu.
Ja tests joprojām beidzas ar Permission denied (publickey), palaidiet detalizēto režīmu:
ssh -vT git@github.com
Meklējiet tādas rindas kā Offering public key. Ja žurnālā nekad netiek piedāvāta gaidītā atslēga, problēma ir lokālajā atslēgas atlasē vai aģenta konfigurācijā. Ja paredzētā atslēga tiek piedāvāta, bet noraidīta, pārbaudiet, vai šī publiskā atslēga ir pievienota pareizajam GitHub kontam un vai ir nepieciešama SSO autorizācija.
Vairāki GitHub konti: pārbaudiet, kura identitāte faktiski tiek izmantota
Ja vienā datorā izmantojat darba un personīgos kontus, veiksmīga SSH autentifikācija joprojām var nonākt nepareizajā kontā. GitHub dokumentē, izmantojot IdentitiesOnly=yesvai konkrētu identitātes failu, lai kontrolētu, kuru atslēgu SSH piedāvā. Vienreizējai diagnostikai:
Ja GitHub sagaida nepareizo lietotājvārdu, esat atradis neatbilstību. Konfigurējiet atsevišķas atslēgas vai resursdatora aizstājvārdus, nevis atkārtoti dzēsiet un pievienojiet atslēgas. GitHub oficiālajā vairāku kontu rokasgrāmatā šis gadījums ir aplūkots sīkāk.
5. Atkārtojiet repozitorija komandu un mainiet pieeju tikai tad, ja pierādījumi norāda uz citu vietu.
Kad ssh -T git@github.comesat autentificējies kā paredzētais lietotājs, mēģiniet vēlreiz veikt faktisko repozitorija darbību:
git fetch origin
git pull
git push
Pēdējā kvalitātes pārbaude ir reālā Git darbība: veiksmīgai autentifikācijai vajadzētu novest pie veiksmīgas piekļuves repozitorijam, ja kontam ir atļauja.
Ja SSH autentifikācija ir veiksmīga, bet Git tagad ziņo par repozitorijam specifisku atļauju kļūdu, pārtrauciet SSH atslēgas maiņu. Šajā brīdī atslēga jau ir paveikusi savu darbu. Pārliecinieties, vai autentificētajam kontam ir piekļuve repozitorijam, vai attālā URL adreses īpašnieks un repozitorija nosaukums ir pareizi un vai organizācija ir piešķīrusi nepieciešamo lomu. GitHub atsevišķā repozitorija atļauju problēmu novēršanas lapā ir paskaidrots gadījums, kad atslēga pieder kontam bez piekļuves.
Ja 22. ports ir bloķēts
Ugunsmūris vai starpniekserveris var neļaut derīgai SSH iestatīšanai sasniegt GitHub 22. portā. Pārbaudiet GitHub dokumentēto SSH-over-HTTPS galapunktu:
ssh -T -p 443 git@ssh.github.com
Šajā tiešajā 443. porta testā resursdatora nosaukums ir ssh.github.com, nevis . Ja tas darbojas, GitHub dokumentē šo SSH konfigurāciju:github.com
Host github.com
Hostname ssh.github.com
Port 443
User git
Pēc tam pārbaudiet vēlreiz ar ssh -T git@github.com. Skatiet GitHub rokasgrāmatu par SSH savienojumu, izmantojot 443. portu . Šis risinājums neattiecas uz visām GitHub Enterprise vidēm, un starpniekserveri joprojām var traucēt.
Kā zināt, kad pārtraukt mēģināt to pašu risinājumu
Ko jūs novērojat
Ko tas nozīmē
Nākamais gājiens
ssh-add -lnerāda paredzēto atslēgu
Klients nevar piedāvāt pareizo privāto atslēgu.
Labot aģenta vai atslēgas ceļu
Detalizēts SSH nekad netiek parādīts Offering public keyjūsu paredzētajai atslēgai
Paredzētā atslēga tiek piedāvāta, bet tiek noraidīta.
GitHub nepieņem šo atslēgu mēģinātajai identitātei.
Pārbaudiet augšupielādēto publisko atslēgu, mērķa kontu un SSO autorizāciju
SSH sagaida nepareizu GitHub lietotājvārdu
Tiek izmantota cita konta atslēga.
Atdaliet konta atslēgas un skaidri atlasiet paredzēto identitāti
SSH veiksmīgi darbojas, bet repozitorijs noraida push vai fetch pieprasījumu
Autentifikācija darbojas; tagad problēma ir repozitorija autorizācija vai URL
Pārbaudiet piekļuvi krātuvei un attālās īpašumtiesības
22. ports vispār nevar izveidot savienojumu
Tīkls, iespējams, bloķē standarta SSH.
Pārbaudiet 443. portu vai izmantojiet HTTPS
Bieži sastopami labojumi, kas bieži vien tērē laiku
Atslēgu ģenerēšana pēc atslēgas, nepārbaudot, ko piedāvā SSH. Vairāk atslēgu var apgrūtināt atlasi. Vispirms izmantojiet ssh -vTun ssh-add -l -E sha256.
Izmantojot savu GitHub lietotājvārdu pirms @github.com. GitHub SSH galapunkts sagaida, ka SSH lietotājs git. Jūsu GitHub identitāti nosaka publiskā atslēga, ko GitHub atpazīst.
Privātās atslēgas augšupielāde. Nedariet to. GitHub ir nepieciešama publiskā .pubvērtība; privātā atslēga paliek jūsu datorā vai apstiprinātā atslēgu krātuvē.
Pieņemot, ka SSH tests ir veiksmīgs, tiek garantēta piekļuve push režīmā. Tas pierāda konta autentifikāciju. Repozitorija autorizācija ir atsevišķa pārbaude.
SSO ignorēšana. Organizācijas resursiem var būt nepieciešama papildu SSH atslēgas autorizācija pat tad, ja atslēga atrodas jūsu personīgajā kontā.
Izmantojot paaugstinātas Git komandas. Palaižot Git kā cits OS lietotājs, var mainīt, kurš mājas direktorijs, SSH konfigurācija, aģents un atslēgas tiek izmantotas.
Kad HTTPS ir labākā atbilde
SSH nav obligāts. GitHub atbalsta arī HTTPS attālinātās piekļuves. Ja slēgta korporatīvā tīkla, pārvaldītas galapunktu politikas vai starpniekservera dēļ SSH nav praktiski lietojams, repozitorija attālinātās piekļuves pārslēgšana uz HTTPS var būt vienkāršāka nekā cīņa ar tīklu. Tā ir autentifikācijas metodes maiņa, nevis SSH konfigurācijas labojums, tāpēc izmantojiet to, ja jūsu vide padara SSH nevēlamu, nevis kā veidu, kā slēpt neatrisinātu atslēgas neatbilstību.
SSH gadījumā visuzticamākais pieturas punkts ir uz pierādījumiem balstīts: paredzētā atslēga tiek ielādēta, GitHub to atpazīst kā paredzēto kontu, organizācija to autorizē, kad tas nepieciešams, un reālā Git darbība ir veiksmīga. Ja kāda no šīm pārbaudēm neizdodas, mainiet tikai to slāni, kas neizdevās. Tas ļauj kontrolēt problēmu novēršanas procesu un novērš nevajadzīgu darba atslēgu nomaiņu.