Hjem
» Basis viden
»
Sådan rettes "Tilladelse nægtet (offentlig nøgle)" i GitHub SSH
Sådan rettes "Tilladelse nægtet (offentlig nøgle)" i GitHub SSH
GitHubs nuværende SSH-fejlfindingsdokumentation, kontrolleret 13. september 2026, behandler stadig Permission denied (publickey)som en godkendelsesfejl: GitHub afviste SSH-forbindelsen, fordi den ikke accepterede en brugbar offentlig nøgle til den konto og forbindelse, du præsenterede. Den hurtigste måde at løse det på er at verificere forbindelsen i en bestemt rækkefølge i stedet for straks at slette nøgler eller generere nye. GitHubs officielle fejlfindingsside for tilladelser nægtet (offentlig nøgle) anbefaler at kontrollere serveren, SSH-brugeren, den tilbudte nøgle, og om den matchende offentlige nøgle er knyttet til din konto.
En god reparation har to observerbare resultater. For det første ssh -T git@github.comidentificeres den GitHub-konto, du havde til hensigt at bruge, og rapporteres vellykket godkendelse. For det andet fungerer den faktiske repository-kommando – såsom git fetch, git pull, git pusheller git clone– med det repository, du har tilladelse til at få adgang til. Hvis du kun bestået den første test, bevises SSH-godkendelse, ikke repository-tilladelse.
Hurtig diagnostisk tjekliste
Check
Sundt resultat
Hvis det mislykkes
Fjern-URL
Anvendelsergit@github.com:OWNER/REPOSITORY.git
Ret værten eller SSH-brugeren, før du ændrer nøgler
Lokale nøglefiler
Der findes et understøttet offentligt/privat nøglepar
Generer kun et nyt nøglepar, hvis du ikke har et, du har til hensigt at bruge.
SSH-agent
ssh-add -l -E sha256angiver den tilsigtede nøgle
Start agenten og tilføj den private nøgle
GitHub-konto
Den matchende offentlige nøgle vises under SSH- og GPG-nøgler
Tilføj den offentlige nøgle til den korrekte konto; godkend den til SSO, når det er nødvendigt
Godkendelsestest
GitHub hilser det forventede brugernavn velkommen
Brug detaljeret SSH-output til at se, hvilken nøgle der rent faktisk tilbydes
Opbevaringsoperation
Hent, pull, push eller klon lykkes
Kontrollér adgang til arkivet, kontoidentitet, SSO, fjern-URL eller netværksbegrænsninger
1. Bekræft destinationen, SSH-brugeren og den eksterne URL
Før du rører dine taster, skal du bekræfte, at du opretter forbindelse til GitHub.com, og at SSH-brugernavnet bogstaveligt talt er git. GitHub dokumenterer, at SSH-forbindelser til GitHub.com skal bruge gitbrugeren, ikke dit personlige GitHub-brugernavn. En kommando som ssh -T yourname@github.comforventes at mislykkes.
git remote -v
ssh -vT git@github.com
For en normal GitHub.com SSH-fjernbetjening skal URL'en se sådan ud:
git@github.com:OWNER/REPOSITORY.git
Hvis fjernbetjeningen er forkert, skal du rette den med Gits fjernbetjeningskonfiguration i stedet for at gengenerere legitimationsoplysninger:
Undgå også at køre almindelige Git-kommandoer med sudoeller med forhøjede rettigheder. GitHub bemærker, at dette kan få Git til at køre under et andet brugermiljø og derfor bruge andre SSH-nøgler end dem, du har konfigureret. Målet på dette tidspunkt er enkelt: et detaljeret output skal vise et forbindelsesforsøg til github.comport 22, medmindre du bevidst har konfigureret den HTTPS-portløsning, der beskrives senere.
2. Bekræft, at der findes en brugbar nøgle, og at den er indlæst.
Tjek din lokale SSH-mappe, før du opretter noget nyt. GitHubs nuværende vejledning anbefaler, at du først kigger efter et eksisterende understøttet nøglepar.
ls -al ~/.ssh
Tjek SSH-mappen for et matchende privat nøgle- og offentligt nøglepar, før du genererer en ny nøgle.
Almindelige standardfilnavne for offentlige nøgler inkluderer id_ed25519.pub, id_ecdsa.pubog id_rsa.pub. GitHub understøtter ikke længere DSA-nøgler. Hvis du allerede har et nøglepar, som du har til hensigt at bruge til GitHub, skal du beholde det og fortsætte med agentkontrollen.
ssh-add -l -E sha256
Et korrekt resultat viser et eller flere fingeraftryk. Hvis den tilsigtede nøgle ikke er indlæst, skal du starte SSH-agenten, som det passer til dit miljø, og tilføje den private nøgle:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
Indlæs den private nøgle i ssh-agent, så SSH-klienten kan tilbyde den under GitHub-godkendelse.
På Windows afhænger den præcise agent-start-kommando af, om du bruger Git Bash, Windows OpenSSH, PowerShell eller et andet miljø. GitHubs officielle vejledning til nøglegenerering og ssh-agent indeholder platformspecifikke instruktioner. Følg afsnittet for den SSH-klient, du rent faktisk bruger; at blande Git til Windows' SSH med Windows OpenSSH er en almindelig kilde til forvirring.
Hvis du ikke har et nøglepar
Generer kun en, når den tidligere kontrol viser, at du ikke har en passende nøgle, du vil bruge. GitHubs nuværende instruktioner anbefaler Ed25519 som standard softwarenøgle, når den understøttes:
ssh-keygen -t ed25519 -C "your_email@example.com"
Brug en adgangskode, hvis den passer til dine sikkerhedskrav. SSH-agenten kan cache den ulåste private nøgle til din session. Upload eller indsæt aldrig selve den private nøglefil i GitHub; filen, der ender på , .puber den offentlige nøgle, der er beregnet til kontoregistrering.
3. Vedhæft den matchende offentlige nøgle til den korrekte GitHub-konto
Det er ikke nok at have en lokal nøgle. GitHub skal have den matchende offentlige nøgle tilknyttet den konto, der skal godkendes. Vis den offentlige nøgle, og kopier derefter hele linjen:
cat ~/.ssh/id_ed25519.pub
I GitHub skal du åbne Indstillinger , derefter SSH- og GPG-nøgler , vælge Ny SSH-nøgle eller Tilføj SSH-nøgle , vælge en godkendelsesnøgle, og indsætte den offentlige nøgle. Disse etiketter matcher GitHubs nuværende officielle dokumentation for tilføjelse af en SSH-nøgle .
Tilføj den offentlige nøgle – ikke den private nøgle – til den GitHub-konto, der skal godkende SSH-forbindelsen.
Sammenlign fingeraftryk, når du er usikker på, hvilken lokal nøgle der svarer til posten på GitHub:
ssh-add -l -E sha256
Hvis arkivet tilhører en organisation, der bruger SAML single sign-on, er det muligvis ikke nok at tilføje nøglen til din konto. GitHub dokumenterer, at en SSH-nøgle også kan kræve organisationsgodkendelse. I Indstillinger > SSH- og GPG-nøgler skal du bruge Konfigurer SSO for nøglen og godkende den relevante organisation, når denne kontrol er tilgængelig. Se GitHubs vejledning til godkendelse af SSH-nøgler med SSO .
4. Test godkendelse uafhængigt af Git
Brug ikke git pushsom din eneste test. Test SSH direkte:
ssh -T git@github.com
En vellykket SSH-test identificerer den godkendte GitHub-konto og bekræfter, at nøgleudvekslingen fungerer.
Succesmeddelelsen bør hilse dit GitHub-brugernavn velkommen og forklare, at GitHub ikke giver shell-adgang. GitHub bemærker også, at denne test kan afsluttes med statuskode 1, selv når godkendelsen lykkes, så bedøm den ud fra godkendelsesmeddelelsen i stedet for at forvente en normal interaktiv shell.
Hvis testen stadig ender på Permission denied (publickey), skal du køre verbose-tilstanden:
ssh -vT git@github.com
Se efter linjer som f.eks Offering public key. Hvis loggen aldrig tilbyder den forventede nøgle, er problemet valg af lokal nøgle eller agentkonfiguration. Hvis den tilsigtede nøgle tilbydes, men afvises, skal du kontrollere, om den offentlige nøgle er knyttet til den korrekte GitHub-konto, og om SSO-godkendelse er påkrævet.
Flere GitHub-konti: Bekræft hvilken identitet der rent faktisk bruges
Hvis du bruger arbejds- og personlige konti på den samme computer, kan vellykket SSH-godkendelse stadig lande på den forkerte konto. GitHub-dokumenter bruger IdentitiesOnly=yeseller en specifik identitetsfil til at kontrollere, hvilken nøgle SSH tilbyder. For en engangsdiagnosticering:
Hvis GitHub modtager det forkerte brugernavn, har du fundet uoverensstemmelsen. Konfigurer separate nøgler eller værtsaliasser i stedet for gentagne gange at slette og tilføje nøgler igen. GitHubs officielle guide til flere konti dækker dette tilfælde mere detaljeret.
5. Gentag kommandoen fra repository, og skift derefter kun fremgangsmåde, hvis beviserne peger andetsteds.
Når ssh -T git@github.comdu har godkendt som den forventede bruger, skal du prøve den faktiske repository-handling igen:
git fetch origin
git pull
git push
Den sidste kvalitetskontrol er den rigtige Git-operation: vellykket godkendelse bør resultere i vellykket adgang til arkivet, når kontoen har tilladelse.
Hvis SSH-godkendelse lykkes, men Git nu rapporterer en repository-specifik tilladelsesfejl, skal du stoppe med at ændre SSH-nøglen. På det tidspunkt har nøglen allerede gjort sit job. Bekræft, at den godkendte konto har adgang til repository'et, at ejeren og repository-navnet i den eksterne URL er korrekte, og at en organisation har tildelt den nødvendige rolle. GitHubs separate side om fejlfinding af repository-tilladelser forklarer tilfældet, hvor nøglen tilhører en konto uden adgang.
Hvis port 22 er blokeret
En firewall eller proxy kan forhindre en gyldig SSH-opsætning i at nå GitHub på port 22. Test GitHubs dokumenterede SSH-over-HTTPS-slutpunkt:
ssh -T -p 443 git@ssh.github.com
Værtsnavnet er ssh.github.com, ikke github.com, for denne direkte port-443-test. Hvis det virker, dokumenterer GitHub denne SSH-konfiguration:
Host github.com
Hostname ssh.github.com
Port 443
User git
Test derefter igen med ssh -T git@github.com. Se GitHubs SSH over port 443-vejledning . Denne løsning gælder ikke for alle GitHub Enterprise-miljøer, og proxyservere kan stadig forstyrre.
Hvordan man ved, hvornår man skal stoppe med at prøve den samme løsning
Hvad du observerer
Hvad det betyder
Næste træk
ssh-add -lviser ingen tilsigtet nøgle
Klienten kan ikke tilbyde den korrekte private nøgle
Ret agent- eller nøglestien
Udførlig SSH vises aldrig Offering public keyfor din tilsigtede nøgle
SSH-valget er forkert
Brug -i, IdentitiesOnly=yeseller korriger~/.ssh/config
Den tilsigtede nøgle tilbydes, men afvises
GitHub accepterer ikke den nøgle for den forsøgte identitet
Tjek den uploadede offentlige nøgle, målkontoen og SSO-godkendelsen
SSH hilser det forkerte GitHub-brugernavn velkommen
En anden kontos nøgle bruges
Adskil kontonøgler og vælg eksplicit den tilsigtede identitet
SSH lykkes, men arkivet afviser push eller hent
Godkendelse virker; lagergodkendelse eller URL er nu problemet
Kontroller adgang til arkivet og fjernejerskab
Port 22 kan slet ikke oprette forbindelse
Netværket blokerer muligvis standard SSH
Test port 443 eller brug HTTPS
Almindelige løsninger, der ofte spilder tid
Genererer nøgle efter nøgle uden at tjekke, hvad SSH tilbyder. Flere nøgler kan gøre udvælgelsen sværere. Brug ssh -vTog ssh-add -l -E sha256først.
Brug dit GitHub-brugernavn før @github.com. GitHubs SSH-slutpunkt forventer, at SSH-brugeren git. Din GitHub-identitet bestemmes af den offentlige nøgle, som GitHub genkender.
Uploader den private nøgle. Gør ikke dette. GitHub skal bruge den offentlige .pubværdi; den private nøgle forbliver på din maskine eller i et godkendt nøglelager.
Forudsat at en vellykket SSH-test garanterer push-adgang. Det beviser kontogodkendelse. Godkendelse af arkivet er en separat kontrol.
Ignorerer SSO. Organisationsressourcer kan kræve en yderligere SSH-nøglegodkendelse, selvom nøglen findes på din personlige konto.
Brug af forhøjede Git-kommandoer. Hvis du kører Git som en anden OS-bruger, kan du ændre, hvilken hjemmemappe, SSH-konfiguration, agent og nøgler der bruges.
Når HTTPS er det bedre svar
SSH er ikke obligatorisk. GitHub understøtter også HTTPS-fjernbetjeninger. Hvis et låst virksomhedsnetværk, en politik for administreret slutpunkt eller en proxy gør SSH upraktisk, kan det være enklere at skifte det eksterne lager til HTTPS end at bekæmpe netværket. Det er en ændring af godkendelsesmetoden, ikke en reparation af SSH-konfigurationen, så brug den, når dit miljø gør SSH uønsket, snarere end som en uløst måde at skjule en uløst nøglematch.
For SSH er det mest pålidelige stoppunkt evidensbaseret: den forventede nøgle indlæses, GitHub genkender den som den forventede konto, organisationen autoriserer den, når det er nødvendigt, og den faktiske Git-operation lykkes. Hvis en af disse kontroller mislykkes, skal du kun ændre det lag, der mislykkedes. Det holder fejlfindingsprocessen under kontrol og undgår unødvendig udskiftning af fungerende nøgler.