Slik fikser du «Ingen tillatelse (offentlig nøkkel)» i GitHub SSH
GitHubs nåværende SSH-feilsøkingsdokumentasjon, sjekket 13. september 2026, behandler fortsatt Permission denied (publickey)som en autentiseringsfeil: GitHub avviste SSH-tilkoblingen fordi den ikke godtok en brukbar offentlig nøkkel for kontoen og tilkoblingen du presenterte. Den raskeste måten å fikse dette på er å bekrefte tilkoblingen i en bestemt rekkefølge i stedet for å umiddelbart slette nøkler eller generere nye. GitHubs offisielle feilsøkingsside for tilgang nektet (offentlig nøkkel) anbefaler å sjekke serveren, SSH-brukeren, nøkkelen som tilbys, og om den samsvarende offentlige nøkkelen er knyttet til kontoen din.
En god reparasjon har to observerbare utfall. For det første ssh -T git@github.comidentifiserer den GitHub-kontoen du hadde tenkt å bruke og rapporterer vellykket autentisering. For det andre fungerer den faktiske repository-kommandoen – for eksempel git fetch, git pull, git pusheller git clone– med repositoryen du er autorisert til å få tilgang til. Å bestå kun den første testen beviser SSH-autentisering, ikke repository-tillatelse.
Rask diagnostisk sjekkliste
Sjekke
Sunt resultat
Hvis det mislykkes
Ekstern URL
Bruksområdergit@github.com:OWNER/REPOSITORY.git
Rett verten eller SSH-brukeren før du endrer nøkler
Lokale nøkkelfiler
Det finnes et støttet offentlig/privat nøkkelpar
Generer et nytt nøkkelpar bare hvis du ikke har et du har tenkt å bruke
SSH-agent
ssh-add -l -E sha256lister opp den tiltenkte nøkkelen
Start agenten og legg til den private nøkkelen
GitHub-konto
Den samsvarende offentlige nøkkelen vises under SSH- og GPG-nøkler
Legg til den offentlige nøkkelen til riktig konto; autoriser den for SSO når det er nødvendig
Autentiseringstest
GitHub hilser på det forventede brukernavnet
Bruk detaljert SSH-utdata for å se hvilken nøkkel som faktisk tilbys
Repository-operasjon
Henting, trekk, push eller kloning lykkes
Sjekk tilgang til repositorium, kontoidentitet, SSO, ekstern URL eller nettverksbegrensninger
1. Bekreft destinasjonen, SSH-brukeren og den eksterne URL-en
Før du berører tastene, bekreft at du kobler til GitHub.com og at SSH-brukernavnet bokstavelig talt er git. GitHub dokumenterer at SSH-tilkoblinger til GitHub.com må bruke gitbrukeren, ikke ditt personlige GitHub-brukernavn. En kommando som ssh -T yourname@github.comforventes å mislykkes.
git remote -v
ssh -vT git@github.com
For en vanlig GitHub.com SSH-fjernkontroll, bør URL-en se slik ut:
git@github.com:OWNER/REPOSITORY.git
Hvis fjernkontrollen er feil, korriger den med Gits fjernkonfigurasjon i stedet for å generere legitimasjon på nytt:
Unngå også å kjøre vanlige Git-kommandoer med sudoeller med forhøyede rettigheter. GitHub bemerker at dette kan føre til at Git kjører under et annet brukermiljø og derfor bruker andre SSH-nøkler enn de du konfigurerte. Målet på dette stadiet er enkelt: detaljert utdata skal vise et tilkoblingsforsøk på github.comport 22, med mindre du med vilje konfigurerte HTTPS-portløsningen som beskrives senere.
2. Bekreft at en brukbar nøkkel finnes og er lastet inn
Sjekk din lokale SSH-katalog før du oppretter noe nytt. GitHubs nåværende veiledning anbefaler at du først ser etter et eksisterende støttet nøkkelpar.
ls -al ~/.ssh
Sjekk SSH-katalogen for et samsvarende privatnøkkel- og offentlig nøkkelpar før du genererer en ny nøkkel.
Vanlige standardfilnavn for offentlige nøkler inkluderer id_ed25519.pub, id_ecdsa.pubog id_rsa.pub. GitHub støtter ikke lenger DSA-nøkler. Hvis du allerede har et nøkkelpar du har tenkt å bruke for GitHub, behold det og fortsett med agentsjekken.
ssh-add -l -E sha256
Et sunt resultat viser ett eller flere fingeravtrykk. Hvis den tiltenkte nøkkelen ikke lastes inn, start SSH-agenten som passer for miljøet ditt og legg til den private nøkkelen:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
Last inn den private nøkkelen i ssh-agent slik at SSH-klienten kan tilby den under GitHub-autentisering.
På Windows avhenger den nøyaktige agent-start-kommandoen av om du bruker Git Bash, Windows OpenSSH, PowerShell eller et annet miljø. GitHubs offisielle veiledning for nøkkelgenerering og ssh-agent gir plattformspesifikke instruksjoner. Følg delen for SSH-klienten du faktisk bruker; å blande Git for Windows' SSH med Windows OpenSSH er en vanlig kilde til forvirring.
Hvis du ikke har et nøkkelpar
Generer bare en når den tidligere sjekken viser at du ikke har en passende nøkkel du vil bruke. GitHubs nåværende instruksjoner anbefaler Ed25519 for en standard programvarenøkkel når den støttes:
ssh-keygen -t ed25519 -C "your_email@example.com"
Bruk en passordfrase hvis det passer sikkerhetskravene dine. SSH-agenten kan mellomlagre den ulåste private nøkkelen for økten din. Last aldri opp eller lim inn selve den private nøkkelfilen i GitHub; filen som slutter på .puber den offentlige nøkkelen som er ment for kontoregistrering.
3. Koble den samsvarende offentlige nøkkelen til riktig GitHub-konto
Det er ikke nok å ha en lokal nøkkel. GitHub må ha den samsvarende offentlige nøkkelen knyttet til kontoen som skal autentiseres. Vis den offentlige nøkkelen, og kopier deretter hele linjen:
cat ~/.ssh/id_ed25519.pub
I GitHub åpner du Innstillinger , deretter SSH- og GPG-nøkler , velger Ny SSH-nøkkel eller Legg til SSH-nøkkel , velger en autentiseringsnøkkel og limer inn den offentlige nøkkelen. Disse etikettene samsvarer med GitHubs nåværende offisielle dokumentasjon for å legge til en SSH-nøkkel .
Legg til den offentlige nøkkelen – ikke den private nøkkelen – til GitHub-kontoen som skal autentisere SSH-tilkoblingen.
Sammenlign fingeravtrykk når du er usikker på hvilken lokal nøkkel som samsvarer med oppføringen på GitHub:
ssh-add -l -E sha256
Hvis depotet tilhører en organisasjon som bruker SAML-enkeltpålogging, er det kanskje ikke nok å legge til nøkkelen i kontoen din. GitHub dokumenterer at en SSH-nøkkel også kan kreve organisasjonsautorisasjon. I Innstillinger > SSH- og GPG-nøkler bruker du Konfigurer SSO for nøkkelen og autoriserer den relevante organisasjonen når den kontrollen er tilgjengelig. Se GitHubs veiledning for SSH-nøkkel SSO-autorisasjon .
4. Test autentisering uavhengig av Git
Ikke bruk git pushsom din eneste test. Test SSH direkte:
ssh -T git@github.com
En vellykket SSH-test identifiserer den autentiserte GitHub-kontoen og bekrefter at nøkkelutvekslingen fungerer.
Vellykketmeldingen skal hilse GitHub-brukernavnet ditt og forklare at GitHub ikke gir skalltilgang. GitHub bemerker også at denne testen kan avsluttes med statuskode 1 selv når autentiseringen lykkes, så bedøm den ut fra autentiseringsmeldingen i stedet for å forvente et normalt interaktivt skall.
Hvis testen fortsatt slutter på Permission denied (publickey), kjør verbose-modus:
ssh -vT git@github.com
Se etter linjer som Offering public key. Hvis loggen aldri tilbyr nøkkelen du forventet, er problemet valg av lokal nøkkel eller agentkonfigurasjon. Hvis den tiltenkte nøkkelen blir tilbudt, men avvist, sjekk om den offentlige nøkkelen er knyttet til riktig GitHub-konto og om SSO-autorisasjon kreves.
Flere GitHub-kontoer: bekreft hvilken identitet som faktisk brukes
Hvis du bruker jobb- og personlige kontoer på samme datamaskin, kan vellykket SSH-autentisering fortsatt havne på feil konto. GitHub-dokumenter bruker IdentitiesOnly=yeseller en spesifikk identitetsfil for å kontrollere hvilken nøkkel SSH tilbyr. For en engangsdiagnose:
Hvis GitHub mottar feil brukernavn, har du funnet feilen. Konfigurer separate nøkler eller vertsaliaser i stedet for å gjentatte ganger slette og legge til nøkler på nytt. GitHubs offisielle veiledning for flere kontoer dekker dette tilfellet mer detaljert.
5. Prøv repository-kommandoen på nytt, og endre deretter tilnærming bare hvis bevisene peker et annet sted
Når ssh -T git@github.comdu har autentisert deg som forventet bruker, prøv den faktiske depotoperasjonen på nytt:
git fetch origin
git pull
git push
Den siste kvalitetskontrollen er den virkelige Git-operasjonen: vellykket autentisering skal føre til vellykket tilgang til depotet når kontoen har tillatelse.
Hvis SSH-autentisering lykkes, men Git nå rapporterer en depotspesifikk tillatelsesfeil, må du slutte å endre SSH-nøkkelen. På det tidspunktet har nøkkelen allerede gjort jobben sin. Bekreft at den autentiserte kontoen har tilgang til depotet, at eieren og depotnavnet i den eksterne URL-en er riktige, og at en organisasjon har gitt den nødvendige rollen. GitHubs separate feilsøkingsside for depottillatelser forklarer tilfellet der nøkkelen tilhører en konto uten tilgang.
Hvis port 22 er blokkert
En brannmur eller proxy kan forhindre at et gyldig SSH-oppsett når GitHub på port 22. Test GitHubs dokumenterte SSH-over-HTTPS-endepunkt:
ssh -T -p 443 git@ssh.github.com
Vertsnavnet er ssh.github.com, ikke github.com, for denne direkte port-443-testen. Hvis det fungerer, dokumenterer GitHub denne SSH-konfigurasjonen:
Host github.com
Hostname ssh.github.com
Port 443
User git
Test deretter på nytt med ssh -T git@github.com. Se GitHubs veiledning for SSH over port 443 . Denne løsningen gjelder ikke for alle GitHub Enterprise-miljøer, og proxy-servere kan fortsatt forstyrre.
Hvordan vite når man skal slutte å prøve den samme løsningen
Det du observerer
Hva det betyr
Neste trekk
ssh-add -lviser ingen tiltenkt nøkkel
Klienten kan ikke tilby riktig privatnøkkel
Rett opp agent- eller nøkkelbanen
Detaljert SSH vises aldri Offering public keyfor den tiltenkte nøkkelen
SSH-valget er feil
Bruk -i, IdentitiesOnly=yes, eller korriger~/.ssh/config
Den tiltenkte nøkkelen blir tilbudt, men avvist
GitHub godtar ikke den nøkkelen for den forsøkte identiteten
Sjekk den opplastede offentlige nøkkelen, målkontoen og SSO-autorisasjonen
SSH hilser feil GitHub-brukernavn
En annen kontos nøkkel brukes
Separate kontonøkler og eksplisitt velg den tiltenkte identiteten
SSH lykkes, men depotet avviser push eller henting
Autentisering fungerer; autorisasjon av repositorium eller URL er nå problemet
Sjekk tilgang til arkivet og eksternt eierskap
Port 22 kan ikke koble til i det hele tatt
Nettverket kan blokkere standard SSH
Test port 443 eller bruk HTTPS
Vanlige løsninger som ofte kaster bort tid
Genererer nøkkel etter nøkkel uten å sjekke hva SSH tilbyr. Flere nøkler kan gjøre valget vanskeligere. Bruk ssh -vTog ssh-add -l -E sha256først.
Bruk av GitHub-brukernavnet ditt før @github.com. GitHubs SSH-endepunkt forventer at SSH-brukeren git. GitHub-identiteten din bestemmes av den offentlige nøkkelen som GitHub gjenkjenner.
Laster opp den private nøkkelen. Ikke gjør dette. GitHub trenger den offentlige .pubverdien; den private nøkkelen forblir på maskinen din eller godkjent nøkkellagring.
Forutsatt at en vellykket SSH-test garanterer push-tilgang. Det beviser kontoautentisering. Autorisasjon av arkivet er en separat kontroll.
Ignorerer SSO. Organisasjonsressurser kan kreve en ekstra SSH-nøkkelautorisasjon selv om nøkkelen finnes i din personlige konto.
Bruk av forhøyede Git-kommandoer. Å kjøre Git som en annen OS-bruker kan endre hvilken hjemmekatalog, SSH-konfigurasjon, agent og nøkler som brukes.
Når HTTPS er det bedre svaret
SSH er ikke obligatorisk. GitHub støtter også HTTPS-fjernkontroller. Hvis et låst bedriftsnettverk, en administrert endepunktpolicy eller en proxy gjør SSH upraktisk, kan det være enklere å bytte den eksterne depottilkoblingen til HTTPS enn å kjempe mot nettverket. Det er en endring av autentiseringsmetoden, ikke en reparasjon av SSH-konfigurasjonen, så bruk den når miljøet ditt gjør SSH uønsket i stedet for som en måte å skjule en uløst nøkkelavvik.
For SSH er det mest pålitelige stoppestedet evidensbasert: den forventede nøkkelen lastes inn, GitHub gjenkjenner den som den forventede kontoen, organisasjonen autoriserer den når det er nødvendig, og den virkelige Git-operasjonen lykkes. Hvis en av disse kontrollene mislykkes, endrer du bare laget som mislyktes. Det holder feilsøkingsprosessen kontrollert og unngår å bytte ut fungerende nøkler unødvendig.