Hur man åtgärdar "Tillstånd nekad (publickey)" i GitHub SSH

GitHubs nuvarande SSH-felsökningsdokumentation, kontrollerad 13 september 2026, behandlar fortfarande Permission denied (publickey)som ett autentiseringsfel: GitHub avvisade SSH-anslutningen eftersom den inte accepterade en användbar offentlig nyckel för kontot och anslutningen du presenterade. Det snabbaste sättet att åtgärda det är att verifiera anslutningen i en specifik ordning istället för att omedelbart ta bort nycklar eller generera nya. GitHubs officiella felsökningssida för denierad behörighet (publickey) rekommenderar att du kontrollerar servern, SSH-användaren, nyckeln som erbjuds och om den matchande offentliga nyckeln är kopplad till ditt konto.

En bra reparation har två observerbara resultat. För det första ssh -T git@github.comidentifierar den det GitHub-konto du avsåg att använda och rapporterar lyckad autentisering. För det andra fungerar det faktiska repository-kommandot – som git fetch, git pull, git pusheller git clone– med det repository du har behörighet att komma åt. Att endast klara det första testet bevisar SSH-autentisering, inte repository-behörighet.

Snabb diagnostisk checklista

KontrolleraHälsosamt resultatOm det misslyckas
Fjärr-URLAnvändningsområdengit@github.com:OWNER/REPOSITORY.gitKorrigera värden eller SSH-användaren innan du byter nycklar
Lokala nyckelfilerEtt stödt offentligt/privat nyckelpar finnsGenerera ett nytt nyckelpar endast om du inte har ett du tänker använda
SSH-agentssh-add -l -E sha256listar den avsedda nyckelnStarta agenten och lägg till den privata nyckeln
GitHub-kontoDen matchande publika nyckeln visas under SSH- och GPG-nycklarLägg till den offentliga nyckeln till rätt konto; auktorisera den för SSO vid behov
AutentiseringstestGitHub hälsar det förväntade användarnamnetAnvänd utförlig SSH-utdata för att se vilken nyckel som faktiskt erbjuds
DatabasoperationHämta, pull, push eller klona lyckasKontrollera åtkomst till arkiv, kontoidentitet, SSO, fjärr-URL eller nätverksbegränsningar

1. Verifiera destinationen, SSH-användaren och fjärr-URL:en

Innan du trycker på tangenterna, bekräfta att du ansluter till GitHub.com och att SSH-användarnamnet bokstavligen är git. GitHub dokumenterar att SSH-anslutningar till GitHub.com måste använda gitanvändaren, inte ditt personliga GitHub-användarnamn. Ett kommando som ssh -T yourname@github.comförväntas misslyckas.

git remote -v
ssh -vT git@github.com

För en vanlig GitHub.com SSH-fjärrkontroll bör URL:en se ut så här:

git@github.com:OWNER/REPOSITORY.git

Om fjärrkontrollen är fel, korrigera den med Gits fjärrkonfiguration istället för att generera inloggningsuppgifter på nytt:

git remote set-url origin git@github.com:OWNER/REPOSITORY.git

Undvik också att köra vanliga Git-kommandon med sudoeller med förhöjda privilegier. GitHub noterar att detta kan få Git att köras under en annan användarmiljö och därför använda andra SSH-nycklar än de du konfigurerat. Målet i detta skede är enkelt: utförlig utdata ska visa ett anslutningsförsök till github.comport 22, såvida du inte avsiktligt konfigurerat HTTPS-portlösningen som beskrivs senare.

2. Bekräfta att en användbar nyckel finns och är laddad

Kontrollera din lokala SSH-katalog innan du skapar något nytt. GitHubs nuvarande riktlinjer rekommenderar att du först letar efter ett befintligt nyckelpar som stöds.

ls -al ~/.ssh
Terminalvy som listar en befintlig privat nyckel id_ed25519 och en publik nyckel id_ed25519.pub i SSH-katalogen.
Kontrollera SSH-katalogen för ett matchande privat nyckelpar och ett publikt nyckelpar innan du genererar en ny nyckel.

Vanliga standardfilnamn för offentliga nycklar inkluderar id_ed25519.pub, id_ecdsa.puboch id_rsa.pub. GitHub stöder inte längre DSA-nycklar. Om du redan har ett nyckelpar som du tänker använda för GitHub, behåll det och fortsätt med agentkontrollen.

ssh-add -l -E sha256

Ett felfritt resultat listar ett eller flera fingeravtryck. Om den avsedda nyckeln inte laddas, starta SSH-agenten enligt din miljö och lägg till den privata nyckeln:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
Terminalvy startar ssh-agent och lägger till den privata nyckeln id_ed25519
Ladda den privata nyckeln i ssh-agent så att SSH-klienten kan erbjuda den under GitHub-autentisering.

I Windows beror det exakta agent-start-kommandot på om du använder Git Bash, Windows OpenSSH, PowerShell eller en annan miljö. GitHubs officiella guide för nyckelgenerering och ssh-agent ger plattformsspecifika instruktioner. Följ avsnittet för den SSH-klient du faktiskt använder; att blanda Git för Windows SSH med Windows OpenSSH är en vanlig källa till förvirring.

Om du inte har ett nyckelpar

Generera en endast när den tidigare kontrollen visar att du inte har en lämplig nyckel som du vill använda. GitHubs nuvarande instruktioner rekommenderar Ed25519 för en standardnyckel för programvaruversionen när den stöds:

ssh-keygen -t ed25519 -C "your_email@example.com"

Använd en lösenfras om det passar dina säkerhetskrav. SSH-agenten kan cachelagra den upplåsta privata nyckeln för din session. Ladda aldrig upp eller klistra in själva den privata nyckelfilen i GitHub; filen som slutar på .pubär den publika nyckeln som är avsedd för kontoregistrering.

3. Koppla den matchande publika nyckeln till rätt GitHub-konto

Att ha en lokal nyckel räcker inte. GitHub måste ha den matchande publika nyckeln associerad med kontot som ska autentiseras. Visa den publika nyckeln och kopiera sedan hela raden:

cat ~/.ssh/id_ed25519.pub

I GitHub, öppna Inställningar , sedan SSH- och GPG-nycklar , välj Ny SSH-nyckel eller Lägg till SSH-nyckel , välj en autentiseringsnyckel och klistra in den publika nyckeln. Dessa etiketter matchar GitHubs nuvarande officiella dokumentation för att lägga till en SSH-nyckel .

GitHub-inställningsvy med SSH- och GPG-nycklar valda och en ny autentiseringsnyckel som läggs till
Lägg till den offentliga nyckeln – inte den privata nyckeln – till GitHub-kontot som ska autentisera SSH-anslutningen.

Jämför fingeravtryck när du är osäker på vilken lokal nyckel som motsvarar posten på GitHub:

ssh-add -l -E sha256

Om arkivet tillhör en organisation som använder SAML-single sign-on kanske det inte räcker att lägga till nyckeln till ditt konto. GitHub dokumenterar att en SSH-nyckel också kan kräva organisationsauktorisering. I Inställningar > SSH- och GPG-nycklar använder du Konfigurera SSO för nyckeln och auktoriserar relevant organisation när den kontrollen är tillgänglig. Se GitHubs guide för SSH-nyckel SSO-auktorisering .

4. Testa autentisering oberoende av Git

Använd inte git pushsom enda test. Testa SSH direkt:

ssh -T git@github.com
Terminal som visar GitHub SSH-testkommandot och en lyckad autentiseringshälsning
Ett lyckat SSH-test identifierar det autentiserade GitHub-kontot och bekräftar att nyckelutbytet fungerar.

Meddelandet om lyckad autentisering bör mötas av ditt GitHub-användarnamn och förklara att GitHub inte tillhandahåller shell-åtkomst. GitHub noterar också att det här testet kan avslutas med statuskod 1 även när autentiseringen lyckas, så bedöm det utifrån autentiseringsmeddelandet snarare än att förvänta dig ett normalt interaktivt shell.

Om testet fortfarande slutar på Permission denied (publickey), kör verbose-läget:

ssh -vT git@github.com

Leta efter rader som Offering public key. Om loggen aldrig erbjuder den nyckel du förväntade dig är problemet lokalt nyckelval eller agentkonfiguration. Om den avsedda nyckeln erbjuds men avvisas, kontrollera om den offentliga nyckeln är kopplad till rätt GitHub-konto och om SSO-auktorisering krävs.

Flera GitHub-konton: verifiera vilken identitet som faktiskt används

Om du använder arbets- och privata konton på samma dator kan lyckad SSH-autentisering fortfarande hamna på fel konto. GitHub-dokument använder IdentitiesOnly=yeseller en specifik identitetsfil för att kontrollera vilken nyckel SSH erbjuder. För en engångsdiagnostik:

ssh -v -o "IdentitiesOnly=yes" -i ~/.ssh/work_ed25519 git@github.com

Om GitHub får fel användarnamn har du hittat felaktigheten. Konfigurera separata nycklar eller värdalias istället för att upprepade gånger ta bort och lägga till nycklar igen. GitHubs officiella guide för flera konton behandlar detta fall mer i detalj.

5. Försök igen med repository-kommandot och ändra sedan tillvägagångssättet endast om bevisen pekar någon annanstans

När ssh -T git@github.comdu autentiserar dig som den förväntade användaren, försök igen med den faktiska databasåtgärden:

git fetch origin
git pull
git push
Terminalvy som visar en GitHub SSH-klon som slutförs efter att autentiseringen är åtgärdad
Den sista kvalitetskontrollen är den verkliga Git-operationen: lyckad autentisering bör leda till lyckad åtkomst till arkivet när kontot har behörighet.

Om SSH-autentiseringen lyckas men Git nu rapporterar ett arkivspecifikt behörighetsfel, sluta ändra SSH-nyckeln. Vid den tidpunkten har nyckeln redan gjort sitt jobb. Kontrollera att det autentiserade kontot har åtkomst till arkivet, att ägaren och arkivnamnet i fjärr-URL:en är korrekta och att en organisation har beviljat den erforderliga rollen. GitHubs separata felsökningssida för arkivbehörigheter förklarar fallet där nyckeln tillhör ett konto utan åtkomst.

Om port 22 är blockerad

En brandvägg eller proxy kan förhindra att en giltig SSH-konfiguration når GitHub på port 22. Testa GitHubs dokumenterade SSH-över-HTTPS-slutpunkt:

ssh -T -p 443 git@ssh.github.com

Värdnamnet är ssh.github.com, inte github.com, för detta direkta port-443-test. Om det fungerar dokumenterar GitHub denna SSH-konfiguration:

Host github.com
    Hostname ssh.github.com
    Port 443
    User git

Testa sedan igen med ssh -T git@github.com. Se GitHubs guide för SSH över port 443 . Den här lösningen gäller inte alla GitHub Enterprise-miljöer, och proxyservrar kan fortfarande störa.

Hur man vet när man ska sluta försöka med samma lösning

Vad du observerarVad det betyderNästa drag
ssh-add -lvisar ingen avsedd nyckelKlienten kan inte erbjuda rätt privat nyckelÅtgärda agenten eller nyckelsökvägen
Utförlig SSH visas aldrig Offering public keyför din avsedda nyckelSSH-valet är felaktigtAnvänd -i, IdentitiesOnly=yes, eller korrigera~/.ssh/config
Den avsedda nyckeln erbjuds men avvisasGitHub accepterar inte den nyckeln för den försökta identitetenKontrollera den uppladdade offentliga nyckeln, målkontot och SSO-auktoriseringen
SSH hälsar fel GitHub-användarnamnNyckeln till ett annat konto användsSeparera kontonycklar och välj explicit den avsedda identiteten
SSH lyckas, men arkivet avvisar push eller hämtningAutentisering fungerar; arkivauktorisering eller URL är nu problemetKontrollera åtkomst till arkivet och fjärrägande
Port 22 kan inte ansluta allsNätverket kan blockera standard SSHTesta port 443 eller använd HTTPS

Vanliga lösningar som ofta slösar tid

Genererar nyckel efter nyckel utan att kontrollera vad SSH erbjuder. Fler nycklar kan göra valet svårare. Använd ssh -vToch ssh-add -l -E sha256först.

Använd ditt GitHub-användarnamn före @github.com. GitHubs SSH-slutpunkt förväntar sig SSH-användaren git. Din GitHub-identitet bestäms av den offentliga nyckel som GitHub känner igen.

Laddar upp den privata nyckeln. Gör inte detta. GitHub behöver det publika .pubvärdet; den privata nyckeln finns kvar på din dator eller i godkänt nyckellager.

Förutsatt att ett lyckat SSH-test garanterar push-åtkomst. Det bevisar kontoautentisering. Arkivauktorisering är en separat kontroll.

Ignorerar SSO. Organisationsresurser kan kräva ytterligare SSH-nyckelauktorisering även om nyckeln finns i ditt personliga konto.

Använda förhöjda Git-kommandon. Att köra Git som en annan OS-användare kan ändra vilken hemkatalog, SSH-konfiguration, agent och nycklar som används.

När HTTPS är det bättre svaret

SSH är inte obligatoriskt. GitHub stöder även HTTPS-fjärrstyrningar. Om ett låst företagsnätverk, en policy för hanterad slutpunkt eller en proxy gör SSH opraktiskt, kan det vara enklare att byta fjärrstyrningen av arkivet till HTTPS än att bekämpa nätverket. Det är en ändring av autentiseringsmetoden, inte en reparation av SSH-konfigurationen, så använd den när din miljö gör SSH oönskad snarare än som ett sätt att dölja en olöst nyckelmatchningsfel.

För SSH är den mest tillförlitliga stopppunkten evidensbaserad: den förväntade nyckeln laddas, GitHub känner igen den som det förväntade kontot, organisationen auktoriserar den vid behov och den verkliga Git-operationen lyckas. Om en av dessa kontroller misslyckas, ändra endast det lager som misslyckades. Det håller felsökningsprocessen under kontroll och undviker att fungerande nycklar byts ut i onödan.

Officiella referenser

Lämna en kommentar

Hur man åtgärdar "Tailwind CSS-stilar uppdateras inte" i en Vite React-app

Hur man åtgärdar "Tailwind CSS-stilar uppdateras inte" i en Vite React-app

Åtgärda Tailwind CSS-stilar som inte uppdateras i Vite React genom att kontrollera Tailwind v4-inställningar, CSS-importer, källkodsidentifiering, dynamiska klasser, HMR och inaktuella cacher.

Så här åtgärdar du ModuleNotFoundError: Ingen modul med namnet 'pip' i Python 3

Så här åtgärdar du ModuleNotFoundError: Ingen modul med namnet 'pip' i Python 3

Åtgärda Python 3:s ModuleNotFoundError för pip på Windows, macOS och Linux med ensurepip, OS-paket, virtuella miljöer och tolkkontroller.

Hur man åtgärdar "Tillstånd nekad (publickey)" i GitHub SSH

Hur man åtgärdar "Tillstånd nekad (publickey)" i GitHub SSH

Åtgärda GitHub SSH-behörighet nekad (publickey) genom att kontrollera värden, aktiv SSH-nyckel, GitHub-konto, SSO-auktorisering, fjärr-URL och port 22-åtkomst.

Hur man åtgärdar "Git Push Rejected: Non-Spolar framåt" utan att förlora ändringar

Hur man åtgärdar "Git Push Rejected: Non-Spolar framåt" utan att förlora ändringar

Åtgärda en Git-push som inte snabbspolar framåt på ett säkert sätt. Skydda lokalt arbete, hämta fjärrcommits, välj merge eller rebase, lös konflikter och pusha utan att förlora ändringar.

Hur man åtgärdar "Nginx 502 Bad Gateway" vid proxyanvändning till Node.js

Hur man åtgärdar "Nginx 502 Bad Gateway" vid proxyanvändning till Node.js

Åtgärda Nginx 502 Bad Gateway-fel med en Node.js-uppström genom att kontrollera appporten, NGINX-loggarna, proxy_pass-adressen, containernätverk, timeouts och omladdning.

How to Fix “Type 'null' Is Not Assignable to Type” in TypeScript

How to Fix “Type 'null' Is Not Assignable to Type” in TypeScript

Fix TypeScript's “Type 'null' is not assignable to type” error with union types, narrowing, defaults, and safe assertions under strictNullChecks.

Så här åtgärdar du felet ”Prisma Client has not been generated yet”

Så här åtgärdar du felet ”Prisma Client has not been generated yet”

Åtgärda felet att Prisma Client inte har genererats genom att kontrollera din generator, ditt schema, utdatasökvägen, importerna, versionerna, monorepo-konfigurationen och byggstegen vid distribution.

Hur man åtgärdar "ERR_MODULE_NOT_FOUND" i Node.js ESM-importer

Hur man åtgärdar "ERR_MODULE_NOT_FOUND" i Node.js ESM-importer

Åtgärda Node.js ERR_MODULE_NOT_FOUND i ESM genom att kontrollera importsökvägar, filtillägg, paketinstallation, exporter, ESM-läge och rena installationer.

Så här åtgärdar du SSL-certifikatproblemet: Unable to Get Local Issuer Certificate i Git

Så här åtgärdar du SSL-certifikatproblemet: Unable to Get Local Issuer Certificate i Git

Åtgärda Gits fel 'unable to get local issuer certificate' genom att identifiera förtroendebakgrunden, installera rätt CA-kedja och hålla SSL-verifieringen aktiverad.

Så åtgärdar du MongoDB-nätverksavbrott vid Mongoose-anslutning

Så åtgärdar du MongoDB-nätverksavbrott vid Mongoose-anslutning

Åtgärda MongoDB-nätverksavbrott i Mongoose genom att identifiera avbrottstypen, testa Atlas- eller TCP-anslutning, korrigera URI:n och justera tidsgränser endast när det är motiverat.