Kezdőlap
» Alap tudás
»
A „Hozzáférés megtagadva (nyilvános kulcs)” hiba javítása a GitHub SSH-ban
A „Hozzáférés megtagadva (nyilvános kulcs)” hiba javítása a GitHub SSH-ban
A GitHub jelenlegi, 2026. szeptember 13-án ellenőrzött SSH hibaelhárítási dokumentációja továbbra is Permission denied (publickey)hitelesítési hibaként kezeli a következőt: A GitHub elutasította az SSH-kapcsolatot, mert nem fogadott el használható nyilvános kulcsot a megadott fiókhoz és kapcsolathoz. A leggyorsabb megoldás a kapcsolatok ellenőrzése egy adott sorrendben, a kulcsok azonnali törlése vagy újak generálása helyett. A GitHub hivatalos „ Engedély megtagadva” (publikus kulcs) hibaelhárítási oldala azt javasolja, hogy ellenőrizd a szervert, az SSH-felhasználót, a felajánlott kulcsot, és azt, hogy a megfelelő nyilvános kulcs hozzá van-e rendelve a fiókodhoz.
Egy jó javításnak két megfigyelhető eredménye van. Először is, ssh -T git@github.comazonosítja a használni kívánt GitHub-fiókot, és sikeres hitelesítést jelent. Másodszor, a tényleges repository parancs – például a git fetch, git pull, git pushvagy git clone– azzal a repositoryval működik, amelyhez jogosult vagy hozzáférni. Csak az első teszt sikeres teljesítése bizonyítja az SSH-hitelesítést, nem pedig a repository engedélyét.
Gyors diagnosztikai ellenőrzőlista
Ellenőrzés
Egészséges eredmény
Ha nem sikerül
Távoli URL
Felhasználásgit@github.com:OWNER/REPOSITORY.git
Kulcsok módosítása előtt javítsa ki a gazdagépet vagy az SSH felhasználót
Helyi kulcsfájlok
Létezik egy támogatott nyilvános/privát kulcspár
Csak akkor generáljon új kulcspárt, ha nincs olyan, amelyet használni kíván.
SSH-ügynök
ssh-add -l -E sha256felsorolja a kívánt kulcsot
Indítsd el az ügynököt, és add hozzá a privát kulcsot
GitHub-fiók
A megfelelő nyilvános kulcs az SSH és GPG kulcsok alatt jelenik meg.
Add hozzá a nyilvános kulcsot a megfelelő fiókhoz; engedélyezd az egyszeri bejelentkezést, ha szükséges.
Hitelesítési teszt
A GitHub üdvözli a várt felhasználónevet
Használjon részletes SSH kimenetet, hogy lássa, melyik kulcsot kínálja fel a rendszer
Adattár működése
A lekérés, lehívás, küldés vagy klónozás sikeres
Ellenőrizze a tárház hozzáférését, a fiók identitását, az egyszeri bejelentkezést, a távoli URL-címet vagy a hálózati korlátozásokat
1. Ellenőrizze a célt, az SSH-felhasználót és a távoli URL-címet
Mielőtt megérintenéd a billentyűket, ellenőrizd, hogy a GitHub.com-hoz csatlakozol-e, és hogy az SSH felhasználónév szó szerint git. A GitHub dokumentálja, hogy a GitHub.com-hoz való SSH kapcsolatoknak a felhasználónevet kell használniuk git, nem a személyes GitHub felhasználónevedet. Egy olyan parancs, mint ssh -T yourname@github.coma várhatóan sikertelen lesz.
git remote -v
ssh -vT git@github.com
Egy normál GitHub.com SSH távoli eszköz esetén az URL-nek így kell kinéznie:
git@github.com:OWNER/REPOSITORY.git
Ha a távoli cím hibás, javítsd ki a Git távoli konfigurációjával a hitelesítő adatok újragenerálása helyett:
Kerüld a szokásos Git-parancsok futtatását sudoemelt jogosultságokkal vagy jogosultságokkal. A GitHub megjegyzi, hogy ha mégis megteszed, a Git más felhasználói környezetben futhat, és ezért más SSH-kulcsokat használhat, mint amelyeket konfiguráltál. A cél ebben a szakaszban egyszerű: a részletes kimenetnek a github.com22-es porton történő kapcsolódási kísérletet kell mutatnia, kivéve, ha szándékosan konfiguráltad a később ismertetett HTTPS portmegoldást.
2. Győződjön meg arról, hogy létezik és be van töltve egy használható kulcs
Mielőtt bármi újat hoznál létre, ellenőrizd a helyi SSH könyvtárat. A GitHub jelenlegi útmutatója azt javasolja, hogy először keress egy meglévő támogatott kulcspárt.
ls -al ~/.ssh
Újabb kulcs generálása előtt ellenőrizd az SSH könyvtárat, hogy van-e egyező privát kulcs és nyilvános kulcspár.
Az alapértelmezett nyilvános kulcsfájlnevek közé tartozik id_ed25519.puba , id_ecdsa.pubés id_rsa.pub. A GitHub már nem támogatja a DSA kulcsokat. Ha már van egy kulcspárja, amelyet a GitHubhoz használni kíván, tartsa meg, és folytassa az ügynök ellenőrzését.
ssh-add -l -E sha256
Egy egészséges eredmény egy vagy több ujjlenyomatot tartalmaz. Ha a kívánt kulcs nincs betöltve, indítsa el az SSH-ügynököt a környezetének megfelelően, és adja hozzá a privát kulcsot:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
Töltsd be a privát kulcsot az ssh-agentbe, hogy az SSH kliens fel tudja ajánlani azt a GitHub hitelesítés során.
Windows rendszeren a pontos agent-start parancs attól függ, hogy Git Bash-t, Windows OpenSSH-t, PowerShell-t vagy más környezetet használsz. A GitHub hivatalos kulcsgenerálási és ssh-agent útmutatója platformspecifikus utasításokat tartalmaz. Kövesd az általad használt SSH klienshez tartozó részt; a Git for Windows SSH-jának és a Windows OpenSSH-nak a keverése gyakori zavarforrás.
Ha nincs kulcspárja
Csak akkor generálj egyet, ha a korábbi ellenőrzés azt mutatja, hogy nincs megfelelő kulcsod, amit használni szeretnél. A GitHub jelenlegi utasításai az Ed25519-et javasolják szabványos szoftverkulcsként, amennyiben támogatott:
ssh-keygen -t ed25519 -C "your_email@example.com"
Használjon jelszót, ha az megfelel a biztonsági igényeinek. Az SSH ügynök gyorsítótárazhatja a munkamenet feloldott privát kulcsát. Soha ne töltse fel vagy illessze be magát a privát kulcsfájlt a GitHubba; a végződésű fájl .puba fiók regisztrációjához használt nyilvános kulcs.
3. Csatolja a megfelelő nyilvános kulcsot a megfelelő GitHub-fiókhoz
A helyi kulcs megléte nem elég. A GitHubnak rendelkeznie kell a hitelesítéshez használt fiókhoz tartozó megfelelő nyilvános kulccsal. Jelenítse meg a nyilvános kulcsot, majd másolja ki a teljes sort:
cat ~/.ssh/id_ed25519.pub
A GitHubban nyisd meg a Beállításokat , majd az SSH és GPG kulcsok lehetőséget , válaszd az Új SSH kulcs vagy az SSH kulcs hozzáadása lehetőséget , válassz ki egy hitelesítési kulcsot, és illeszd be a nyilvános kulcsot. Ezek a címkék megegyeznek a GitHub aktuális hivatalos SSH-kulcs hozzáadása dokumentációjával .
Add hozzá a nyilvános kulcsot – ne a privát kulcsot – ahhoz a GitHub-fiókhoz, amelynek hitelesítenie kell az SSH-kapcsolatot.
Hasonlítsa össze az ujjlenyomatokat, ha nem biztos benne, hogy melyik helyi kulcs felel meg a GitHub-on található bejegyzésnek:
ssh-add -l -E sha256
Ha a tárház egy olyan szervezethez tartozik, amely SAML egyszeri bejelentkezést használ, akkor a kulcs fiókhoz való hozzáadása nem biztos, hogy elegendő. A GitHub dokumentálja, hogy egy SSH-kulcshoz szervezeti hitelesítés is szükséges lehet. A Beállítások > SSH és GPG-kulcsok menüpontban használja az SSO konfigurálása lehetőséget a kulcshoz, és hitelesítse a megfelelő szervezetet, ha ez a vezérlő elérhető. Lásd a GitHub SSH-kulcs SSO-hitelesítési útmutatóját .
4. Hitelesítés tesztelése a Gittől függetlenül
Ne használd git pushegyetlen tesztként. Teszteld közvetlenül az SSH-t:
ssh -T git@github.com
Egy sikeres SSH-teszt azonosítja a hitelesített GitHub-fiókot, és megerősíti, hogy a kulcscsere működik.
A sikerüzenetnek üdvözölnie kell a GitHub felhasználónevedet, és el kell magyaráznia, hogy a GitHub nem biztosít shell hozzáférést. A GitHub azt is megjegyzi, hogy ez a teszt sikeres hitelesítés esetén is 1-es állapotkóddal fejeződhet be, ezért a hitelesítési üzenet alapján ítéld meg, ne pedig egy normál interaktív shellre számíts.
Ha a teszt továbbra is karakterrel végződik Permission denied (publickey), futtassa a részletes módot:
ssh -vT git@github.com
Keressen az olyan sorokat, mint például a Offering public key. Ha a napló soha nem kínálja fel a várt kulcsot, a probléma a helyi kulcskiválasztással vagy az ügynök konfigurációjával van. Ha a kívánt kulcsot felajánlja a rendszer, de elutasítja, ellenőrizze, hogy a nyilvános kulcs a megfelelő GitHub-fiókhoz van-e csatolva, és hogy szükséges-e az SSO-hitelesítés.
Több GitHub-fiók: ellenőrizze, hogy melyik identitást használják valójában
Ha munkahelyi és személyes fiókokat használ ugyanazon a számítógépen, a sikeres SSH-hitelesítés továbbra is rossz fiókhoz érkezhet. A GitHub IdentitiesOnly=yesegy adott azonosítófájl használatával dokumentálja, amely szabályozza, hogy az SSH melyik kulcsot kínálja. Egyszeri diagnosztikához:
Ha a GitHub rossz felhasználónevet üdvözöl, akkor megtaláltad az eltérést. Konfigurálj külön kulcsokat vagy host aliasokat a kulcsok ismételt törlése és újbóli hozzáadása helyett. A GitHub hivatalos többfiókos útmutatója részletesebben tárgyalja ezt az esetet.
5. Próbáld újra a repository parancsot, majd csak akkor változtass a megközelítésen, ha a bizonyítékok másra mutatnak
Miután ssh -T git@github.coma várt felhasználóként hitelesítette magát, próbálja meg újra a tényleges adattárműveletet:
git fetch origin
git pull
git push
A végső minőségellenőrzés a valódi Git-művelet: a sikeres hitelesítésnek sikeres adattár-hozzáférést kell jelentenie, amikor a fiók rendelkezik engedéllyel.
Ha az SSH hitelesítés sikeres, de a Git most egy adattár-specifikus jogosultsági hibát jelez, akkor hagyd abba az SSH-kulcs módosítását. Ezen a ponton a kulcs már elvégezte a feladatát. Ellenőrizd, hogy a hitelesített fiók hozzáfér-e az adattárhoz, hogy a tulajdonos és az adattár neve helyes-e a távoli URL-ben, és hogy a szervezet megadta-e a szükséges szerepkört. A GitHub különálló adattár-engedélyekkel kapcsolatos hibaelhárítási oldala elmagyarázza azt az esetet, amikor a kulcs egy hozzáféréssel nem rendelkező fiókhoz tartozik.
Ha a 22-es port blokkolva van
Egy tűzfal vagy proxy megakadályozhatja, hogy egy érvényes SSH-beállítás elérje a GitHubot a 22-es porton. Teszteld a GitHub dokumentált SSH-over-HTTPS végpontját:
ssh -T -p 443 git@ssh.github.com
A hosztnév ssh.github.com, nem pedig github.comehhez a közvetlen 443-as portteszthez. Ha működik, a GitHub dokumentálja ezt az SSH konfigurációt:
Host github.com
Hostname ssh.github.com
Port 443
User git
Ezután próbáld újra a következővel ssh -T git@github.com: . Lásd a GitHub SSH 443-as porton keresztüli használatáról szóló útmutatóját . Ez a kerülő megoldás nem vonatkozik minden GitHub Enterprise környezetre, és a proxykiszolgálók továbbra is zavarhatják a működést.
Hogyan tudhatjuk, mikor kell abbahagyni ugyanazon megoldás kipróbálását?
Amit megfigyelsz
Mit jelent
Következő lépés
ssh-add -lnem mutatja a kívánt kulcsot
Az ügyfél nem tudja megadni a megfelelő privát kulcsot
Az ügynök vagy a kulcs elérési útjának javítása
A részletes SSH soha nem jelenik Offering public keymeg a kívánt kulcshoz
Az SSH kiválasztása helytelen
Használja a -i, IdentitiesOnly=yes, vagy javítsa ki a~/.ssh/config
A kívánt kulcsot felajánlják, de elutasítják
A GitHub nem fogadja el ezt a kulcsot a megkísérelt identitáshoz.
Ellenőrizze a feltöltött nyilvános kulcsot, a célfiókot és az SSO-engedélyezést
Az SSH rossz GitHub felhasználónevet üdvözöl
Egy másik fiók kulcsát használják
A fiókkulcsok elkülönítése és a kívánt identitás explicit kiválasztása
Az SSH sikeres, de a tárház elutasítja a push vagy fetch parancsokat.
A hitelesítés működik; a probléma most a tárház hitelesítése vagy az URL-címe.
Ellenőrizze a tárház elérését és a távoli tulajdonjogot
A 22-es port egyáltalán nem tud csatlakozni
Lehetséges, hogy a hálózat blokkolja a szabványos SSH-t
Tesztelje a 443-as portot, vagy használjon HTTPS-t
Gyakori javítások, amelyek gyakran időt pazarolnak
Kulcsról kulcsra generálunk kulcsot anélkül, hogy ellenőriznénk, mit kínál az SSH. Több kulcs megnehezítheti a választást. Először ssh -vTaz és a kulcsokat használjuk ssh-add -l -E sha256.
A GitHub felhasználóneved használata a `` előtt.`` @github.comA GitHub SSH végpontja az SSH felhasználót várja git. A GitHub identitását a GitHub által felismert nyilvános kulcs határozza meg.
A privát kulcs feltöltése. Ezt ne tedd. A GitHubnak szüksége van a nyilvános .pubértékre; a privát kulcs a gépeden vagy a jóváhagyott kulcstárolóban marad.
Egy sikeres SSH teszt push hozzáférést garantál. Ez igazolja a fiók hitelesítését. A tárház engedélyezése külön ellenőrzés.
Egyszeri bejelentkezés figyelmen kívül hagyása. A szervezeti erőforrások további SSH-kulcs-hitelesítést igényelhetnek, még akkor is, ha a kulcs a személyes fiókjában van.
Emelt szintű Git-parancsok használata. A Git másik operációs rendszerfelhasználóként történő futtatásával módosítható, hogy melyik kezdőkönyvtárat, SSH-konfigurációt, ügynököt és kulcsokat használja.
Amikor a HTTPS a jobb válasz
Az SSH nem kötelező. A GitHub a HTTPS távoli elérésű szervereket is támogatja. Ha egy lezárt vállalati hálózat, felügyelt végpont-szabályzat vagy proxy miatt az SSH nem praktikus, a távoli szerver HTTPS-re váltása egyszerűbb lehet, mint a hálózattal való harc. Ez a hitelesítési módszer megváltoztatása, nem az SSH-konfiguráció javítása, ezért akkor használd, ha a környezeted miatt az SSH nemkívánatos, ahelyett, hogy egy megoldatlan kulcseltérés elrejtésére használnád.
Az SSH esetében a legmegbízhatóbb megállás a bizonyítékokon alapul: a várt kulcs betöltődik, a GitHub felismeri a várt fiókként, a szervezet szükség esetén engedélyezi azt, és a valódi Git-művelet sikeres. Ha az egyik ellenőrzés sikertelen, akkor csak a hibás réteget kell módosítani. Ezáltal a hibaelhárítási folyamat kontroll alatt marad, és elkerülhető a működő kulcsok szükségtelen cseréje.