Как да поправите грешката „Отказано разрешение (публичен ключ)“ в GitHub SSH

Текущата документация на GitHub за отстраняване на проблеми с SSH, проверена на 13 септември 2026 г., все още третира Permission denied (publickey)като неуспешно удостоверяване: GitHub отхвърли SSH връзката, защото не прие използваем публичен ключ за представените от вас акаунт и връзка. Най-бързият начин да го поправите е да проверите връзката в определен ред, вместо незабавно да изтривате ключовете или да генерирате нови. Официалната страница за отстраняване на проблеми с „Отказано разрешение (публичен ключ)“ на GitHub препоръчва да проверите сървъра, SSH потребителя, предлагания ключ и дали съответстващият публичен ключ е прикачен към вашия акаунт.

Един добър ремонт има два наблюдаеми резултата. Първо, ssh -T git@github.comидентифицира GitHub акаунта, който сте възнамерявали да използвате, и докладва за успешно удостоверяване. Второ, действителната команда на хранилището – като например git fetch, git pull, git pushили git clone– работи с хранилището, до което имате оторизиран достъп. Преминаването само на първия тест доказва SSH удостоверяване, а не разрешение за достъп до хранилището.

Контролен списък за бърза диагностика

ПроверетеЗдравословен резултатАко не успее
Отдалечен URL адресУпотребиgit@github.com:OWNER/REPOSITORY.gitКоригирайте хоста или SSH потребителя, преди да промените ключовете
Локални ключови файловеСъществува поддържана двойка публичен/частен ключГенерирайте нова двойка ключове само ако нямате такава, която възнамерявате да използвате
SSH агентssh-add -l -E sha256изброява предвидения ключСтартирайте агента и добавете частния ключ
GitHub акаунтСъответстващият публичен ключ се показва под SSH и GPG ключовеДобавете публичния ключ към правилния акаунт; оторизирайте го за SSO, когато е необходимо
Тест за удостоверяванеGitHub поздравява очакваното потребителско имеИзползвайте подробен SSH изход, за да видите кой ключ всъщност се предлага
Работа с хранилищетоИзвличането, изтеглянето, натискането или клонирането е успешноПроверете достъпа до хранилището, самоличността на акаунта, SSO, отдалечения URL адрес или мрежовите ограничения

1. Проверете местоназначението, SSH потребителя и отдалечения URL адрес

Преди да докоснете клавишите си, потвърдете, че се свързвате с GitHub.com и че потребителското име за SSH е буквално git. GitHub документира, че SSH връзките към GitHub.com трябва да използват gitпотребителя, а не вашето лично потребителско име за GitHub. Очаква се команда като тази ssh -T yourname@github.comда се провали.

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

За нормално SSH дистанционно управление на GitHub.com, URL адресът трябва да изглежда така:

git@github.com:OWNER/REPOSITORY.git

Ако дистанционното управление е грешно, коригирайте го с конфигурацията на Git за дистанционно управление, вместо да генерирате отново идентификационни данни:

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

Също така избягвайте да изпълнявате обикновени Git команди с sudoили с повишени привилегии. GitHub отбелязва, че това може да доведе до това Git да работи в различна потребителска среда и следователно да използва различни SSH ключове от тези, които сте конфигурирали. Целта на този етап е проста: подробният изход трябва да показва опит за свързване на github.comпорт 22, освен ако умишлено не сте конфигурирали заобиколното решение за HTTPS порт, описано по-късно.

2. Потвърдете, че съществува използваем ключ и е зареден

Проверете локалната си SSH директория, преди да създавате нещо ново. Настоящите насоки на GitHub препоръчват първо да потърсите съществуваща поддържана двойка ключове.

ls -al ~/.ssh
Терминален изглед, показващ съществуващ частен ключ id_ed25519 и публичен ключ id_ed25519.pub в SSH директорията
Проверете SSH директорията за съответстваща двойка частен и публичен ключ, преди да генерирате друг ключ.

Често срещаните имена на файлове с публични ключове по подразбиране включват id_ed25519.pub, id_ecdsa.pubи id_rsa.pub. GitHub вече не поддържа DSA ключове. Ако вече имате двойка ключове, която възнамерявате да използвате за GitHub, запазете я и продължете с проверката на агента.

ssh-add -l -E sha256

Здрав резултат изброява един или повече пръстови отпечатъци. Ако желаният ключ не е зареден, стартирайте SSH агента, както е подходящо за вашата среда, и добавете частния ключ:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
Терминален изглед, стартиране на ssh-agent и добавяне на частния ключ id_ed25519
Заредете частния ключ в ssh-agent, така че SSH клиентът да може да го предложи по време на удостоверяване в GitHub.

В Windows, точната команда agent-start зависи от това дали използвате Git Bash, Windows OpenSSH, PowerShell или друга среда. Официалното ръководство за генериране на ключове и ssh-agent на GitHub предоставя специфични за платформата инструкции. Следвайте раздела за SSH клиента, който действително използвате; смесването на SSH на Git за Windows с Windows OpenSSH е често срещан източник на объркване.

Ако нямате двойка ключове

Генерирайте такъв само когато предишната проверка покаже, че нямате подходящ ключ, който искате да използвате. Настоящите инструкции на GitHub препоръчват Ed25519 за стандартен софтуерен ключ, когато се поддържа:

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

Използвайте парола, ако отговаря на вашите изисквания за сигурност. SSH агентът може да кешира отключения личен ключ за вашата сесия. Никога не качвайте и не поставяйте самия файл с личния ключ в GitHub; файлът, завършващ на , .pubе публичният ключ, предназначен за регистрация на акаунт.

3. Прикачете съответстващия публичен ключ към правилния GitHub акаунт

Наличието на локален ключ не е достатъчно. GitHub трябва да има съответстващ публичен ключ, свързан с акаунта, който трябва да се удостовери. Покажете публичния ключ и след това копирайте целия ред:

cat ~/.ssh/id_ed25519.pub

В GitHub отворете Настройки , след това SSH и GPG ключове , изберете Нов SSH ключ или Добавяне на SSH ключ , изберете ключ за удостоверяване и поставете публичния ключ. Тези етикети съответстват на текущата официална документация на GitHub за добавяне на SSH ключ .

Изглед на настройките на GitHub с избрани SSH и GPG ключове и добавяне на нов ключ за удостоверяване
Добавете публичния ключ, а не частния ключ, към GitHub акаунта, който трябва да удостовери SSH връзката.

Сравнете пръстови отпечатъци, когато не сте сигурни кой локален ключ съответства на записа в GitHub:

ssh-add -l -E sha256

Ако хранилището принадлежи на организация, която използва SAML еднократно влизане, добавянето на ключа към вашия акаунт може да не е достатъчно. GitHub документира, че SSH ключ може също да изисква оторизация от организацията. В Настройки > SSH и GPG ключове използвайте Конфигуриране на SSO за ключа и оторизирайте съответната организация, когато този контрол е наличен. Вижте ръководството за оторизация на SSO за SSH ключ на GitHub .

4. Тествайте удостоверяването независимо от Git

Не използвайте git pushкато единствен тест. Тествайте SSH директно:

ssh -T git@github.com
Терминал, показващ командата GitHub SSH test и поздрав за успешно удостоверяване
Успешен SSH тест идентифицира удостоверения GitHub акаунт и потвърждава, че обменът на ключове работи.

Съобщението за успех трябва да поздрави потребителското ви име в GitHub и да обясни, че GitHub не предоставя достъп до shell. GitHub също така отбелязва, че този тест може да приключи със статус код 1, дори когато удостоверяването е успешно, така че го преценете по съобщението за удостоверяване, вместо да очаквате нормален интерактивен shell.

Ако тестът все още завършва на Permission denied (publickey), изпълнете подробен режим:

ssh -vT git@github.com

Потърсете редове като Offering public key. Ако логът никога не предлага очаквания от вас ключ, проблемът е в локалния избор на ключ или конфигурацията на агента. Ако желаният ключ е предложен, но е отхвърлен, проверете дали този публичен ключ е прикачен към правилния GitHub акаунт и дали е необходима SSO авторизация.

Няколко GitHub акаунта: проверете коя самоличност действително се използва

Ако използвате служебен и личен акаунт на един и същ компютър, успешното SSH удостоверяване може все още да доведе до грешен акаунт. GitHub документира използването IdentitiesOnly=yesна специфичен файл за самоличност, за да контролира кой ключ SSH предлага. За еднократна диагностика:

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

Ако GitHub поздрави грешно потребителско име, значи сте открили несъответствието. Конфигурирайте отделни ключове или псевдоними на хостове, вместо да изтривате и добавяте ключове многократно. Официалното ръководство за множество акаунти на GitHub разглежда този случай по-подробно.

5. Опитайте отново командата за хранилище, след което променете подхода само ако доказателствата сочат другаде

След като ssh -T git@github.comсе удостоверите като очаквания потребител, опитайте отново действителната операция с хранилището:

git fetch origin
git pull
git push
Терминален изглед, показващ успешно завършване на SSH клон на GitHub след коригиране на удостоверяването
Последната проверка на качеството е истинската Git операция: успешното удостоверяване би трябвало да доведе до успешен достъп до хранилището, когато акаунтът има разрешение.

Ако SSH удостоверяването е успешно, но Git сега докладва грешка в разрешенията, специфични за хранилището, спрете промяната на SSH ключа. В този момент ключът вече е свършил своята работа. Проверете дали удостовереният акаунт има достъп до хранилището, дали собственикът и името на хранилището в отдалечения URL адрес са правилни и дали организацията е предоставила необходимата роля. Отделната страница за отстраняване на неизправности с разрешенията за хранилище на GitHub обяснява случая, в който ключът принадлежи на акаунт без достъп.

Ако порт 22 е блокиран

Защитна стена или прокси сървър може да попречи на валидна SSH настройка да достигне GitHub на порт 22. Тествайте документираната крайна точка на GitHub за SSH през HTTPS:

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

Името на хоста е ssh.github.com, а не github.com, за този директен тест на порт-443. Ако работи, GitHub документира тази SSH конфигурация:

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

След това тествайте отново с ssh -T git@github.com. Вижте ръководството на GitHub за SSH през порт 443 . Това решение не е приложимо за всяка GitHub Enterprise среда и прокси сървърите все още могат да пречат.

Как да разберете кога да спрете да опитвате едно и също решение

Какво наблюдаватеКакво означава товаСледващ ход
ssh-add -lне показва предназначен ключКлиентът не може да предложи правилния частен ключКоригирайте агента или ключовия път
Подробният SSH никога не се показва Offering public keyза желания от вас ключ.Изборът на SSH е грешенИзползвайте -i, IdentitiesOnly=yesили коригирайте~/.ssh/config
Предложеният ключ е предложен, но е отхвърлен.GitHub не приема този ключ за опита за самоличностПроверете качения публичен ключ, целевия акаунт и SSO оторизацията
SSH поздравява грешно потребителско име в GitHubИзползва се ключът на друг акаунтРазделете ключовете за акаунти и изрично изберете желаната самоличност
SSH е успешен, но хранилището отхвърля push или fetchУдостоверяването работи; проблемът вече е в оторизацията на хранилището или URL адреса.Проверете достъпа до хранилището и отдалечената собственост
Порт 22 изобщо не може да се свържеМрежата може да блокира стандартния SSHТествайте порт 443 или използвайте HTTPS

Често срещани поправки, които често губят време

Генериране на ключ след ключ без проверка какво предлага SSH. Повече ключове могат да затруднят избора. Използвайте първо ` ssh -vTи` ssh-add -l -E sha256.

Използвайки потребителското си име в GitHub преди @github.com. SSH крайната точка на GitHub очаква SSH потребителя git. Вашата GitHub идентичност се определя от публичния ключ, който GitHub разпознава.

Качване на частния ключ. Не правете това. GitHub се нуждае от публичната .pubстойност; частният ключ остава на вашата машина или одобрено хранилище за ключове.

Ако приемем, че един успешен SSH тест гарантира достъп до push файлове. Това доказва удостоверяване на акаунта. Авторизацията на хранилището е отделна проверка.

Игнориране на SSO. Ресурсите на организацията могат да изискват допълнително SSH-ключово удостоверяване, дори когато ключът е наличен в личния ви акаунт.

Използване на Git команди с повишени права. Стартирането на Git като друг потребител на операционната система може да промени коя домашна директория, SSH конфигурация, агент и ключове се използват.

Кога HTTPS е по-добрият отговор

SSH не е задължителен. GitHub поддържа и HTTPS отдалечени сървъри. Ако заключена корпоративна мрежа, политика за управлявани крайни точки или прокси правят SSH непрактичен, превключването на отдалечената сървърна част на хранилището към HTTPS може да е по-лесно от борбата с мрежата. Това е промяна на метода за удостоверяване, а не поправка на SSH конфигурацията, така че го използвайте, когато вашата среда прави SSH нежелан, а не като начин за скриване на неразрешено несъответствие на ключове.

За SSH най-надеждната точка на спиране е базирана на доказателства: очакваният ключ е зареден, GitHub го разпознава като очаквания акаунт, организацията го оторизира, когато е необходимо, и реалната Git операция е успешна. Ако една от тези проверки се провали, променете само слоя, който е провалил. Това контролира процеса на отстраняване на неизправности и избягва ненужната подмяна на работещи ключове.

Официални препратки

Оставете коментар

Как да поправите „CSS стиловете на Tailwind не се актуализират“ в приложение Vite React

Как да поправите „CSS стиловете на Tailwind не се актуализират“ в приложение Vite React

Поправете CSS стиловете на Tailwind, които не се актуализират във Vite React, като проверите настройката на Tailwind v4, CSS импортирането, откриването на източници, динамичните класове, HMR и остарелите кешове.

Как да се поправи ModuleNotFoundError: Няма модул с име „pip“ в Python 3

Как да се поправи ModuleNotFoundError: Няма модул с име „pip“ в Python 3

Поправете ModuleNotFoundError на Python 3 за pip на Windows, macOS и Linux с ensurepip, OS пакети, виртуални среди и проверки на интерпретатора.

Как да поправите грешката „Отказано разрешение (публичен ключ)“ в GitHub SSH

Как да поправите грешката „Отказано разрешение (публичен ключ)“ в GitHub SSH

Поправете отказан достъп до GitHub SSH (публичен ключ), като проверите хоста, активния SSH ключ, GitHub акаунта, SSO оторизацията, отдалечения URL адрес и достъпа до порт 22.

Как да поправите „Git Push Rejected: Non-FastForward“ без загуба на промени

Как да поправите „Git Push Rejected: Non-FastForward“ без загуба на промени

Поправете безопасно Git push, който не превърта напред. Защитете локалната работа, извлечете отдалечени коммити, изберете сливане или пребазиране, разрешите конфликти и push-вайте без загуба на промени.

Как да поправите грешката „Nginx 502 Bad Gateway“ при проксиране към Node.js

Как да поправите грешката „Nginx 502 Bad Gateway“ при проксиране към Node.js

Поправете грешките Nginx 502 Bad Gateway с Node.js upstream, като проверите порта на приложението, NGINX лог файловете, proxy_pass адреса, мрежата на контейнера, времето за изчакване и презареждането.

Как да поправим „Тип 'null' не може да се присвои на тип“ в TypeScript

Как да поправим „Тип 'null' не може да се присвои на тип“ в TypeScript

Поправете грешката на TypeScript „Тип 'null' не може да се присвоява на тип“ с типове обединения, стесняване, стойности по подразбиране и безопасни твърдения под strictNullChecks.

Как да поправите грешката „Prisma Client has not been generated yet“

Как да поправите грешката „Prisma Client has not been generated yet“

Поправете грешката за негенериран Prisma Client, като проверите генератора, схемата, изходния път, импортите, версиите, настройката на монорепо и стъпките за изграждане при внедряване.

Как да поправим "ERR_MODULE_NOT_FOUND" в Node.js ESM импортиране

Как да поправим "ERR_MODULE_NOT_FOUND" в Node.js ESM импортиране

Поправете Node.js ERR_MODULE_NOT_FOUND в ESM, като проверите пътищата за импортиране, файловите разширения, инсталирането на пакети, експортирането, ESM режима и чистите инсталации.

Как да поправите проблема със SSL сертификата: Unable to Get Local Issuer Certificate в Git

Как да поправите проблема със SSL сертификата: Unable to Get Local Issuer Certificate в Git

Поправете грешката на Git "unable to get local issuer certificate", като идентифицирате бекенда за доверие, инсталирате правилната CA верига и запазите SSL верификацията активирана.

Как да поправите грешката за изтичане на мрежовото време в Mongoose връзка с MongoDB

Как да поправите грешката за изтичане на мрежовото време в Mongoose връзка с MongoDB

Поправете грешките за изтичане на мрежовото време в Mongoose, като идентифицирате типа на таймаута, тествате достъпността на Atlas или TCP, коригирате URI и настройвате таймаутите само когато е оправдано.