#Что означает ошибка
Permission denied (publickey)
При git clone git@github.com:user/repo.git и git push Git использует SSH. GitHub проверяет, что у вас есть закрытый ключ, соответствующий одному из загруженных открытых ключей. Если ключ не найден, не загружен в агент, имеет неверные права или в аккаунт добавлен другой, ssh завершается ошибкой Permission denied (publickey).
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Ключ не добавлен в GitHubОткрытый ключ отсутствует в настройках аккаунта. | ssh -T git@github.com не называет вашего имени. | Добавьте .pub в Settings → SSH and GPG keys. |
| ssh-agent не запущенКлюч не загружен в агент. | ssh-add -l пишет The agent has no identities. | Запустите агент и добавьте ключ. |
| Используется другой ключssh выбирает не тот файл ключа. | ssh -vT показывает пробу других ключей. | Задайте IdentityFile в ~/.ssh/config. |
| Неверные права на файлПрава на закрытый ключ слишком широкие. | WARNING: UNPROTECTED PRIVATE KEY FILE! | chmod 600 ~/.ssh/id_ed25519. |
#Пошаговое решение
- Проверьте подключениеВ папке проекта откройте терминал и выполните
git remote -v. Если удалённый адрес начинается сgit@github.com:, используется SSH; еслиhttps://github.com/, эта статья неприменима. Запуститеssh -T git@github.com: при первом подключении SSH может предложить подтвердить подлинность сервера. Сверьте опубликленный GitHub отпечаток SSH-ключа сервера с официальной документацией, прежде чем вводитьyes; не принимайте неизвестный ключ. Успешная аутентификация обычно сообщает имя учётной записи и то, что shell-доступ не предоставляется. ЕслиPermission denied (publickey)остаётся, продолжайте. - Создайте ключПроверьте, существует ли у вас подходящий SSH-ключ: Linux/macOS —
ls -l ~/.ssh/*.pub, Windows PowerShell —Get-ChildItem $HOME/.ssh/*.pub. Если файлаid_ed25519.pubнет, создайте новую пару в своём профиле командойssh-keygen -t ed25519 -C "комментарий", заменив комментарий почтой или названием устройства. Если программа спрашивает, перезаписать существующий ключ, ответьтеn: это может лишить доступа к другим серверам. При создании задайте парольную фразу для закрытого ключа и запишите выбранный путь. Никому не отправляйте файл без расширения.pub. - Запустите агент и добавьте ключЕсли ключ уже есть, проверьте, загружен ли он в агент: в Linux/macOS
ssh-add -l; при отсутствии агента в обычной интерактивной оболочке можно выполнитьeval "$(ssh-agent -s)", затемssh-add ~/.ssh/id_ed25519, указав свой реальный путь. В Windows PowerShell службаssh-agentможет быть остановлена: проверьтеGet-Service ssh-agent, а изменение её режима запуска требует разрешения администратора; после запуска агенту можно добавить ключ черезssh-add $HOME/.ssh/id_ed25519. Успех — отпечаток ключа в выводеssh-add -l. Не меняйте системные службы, если используете другой агент IDE. - Добавьте открытый ключ в GitHubОткройте свою учётную запись GitHub → фото профиля → Settings → SSH and GPG keys → New SSH key. Через терминал прочитайте только открытый ключ: Linux/macOS
cat ~/.ssh/id_ed25519.pub, Windows PowerShellGet-Content $HOME/.ssh/id_ed25519.pub. Скопируйте полную строкуssh-ed25519 ...в поле Key, задайте понятное имя в Title и сохраните. Не вставляйте закрытый ключ и не добавляйте ключ в чужую учётную запись; доступ к организации и репозиторию определяется отдельно, одной аутентификации недостаточно. - Проверьте URL репозиторияВыполните
git remote -vи убедитесь, что адрес относится к правильному владельцу и репозиторию. Например,git@github.com:OWNER/REPO.git— только образец, замените обе части настоящими значениями. Если текущий origin намеренно использует HTTPS, не меняйте его ради диагностики SSH. Для SSH-репозитория исправление адреса черезgit remote set-url origin ...допустимо только после сверки с кнопкой «Code» → «SSH» на странице нужного репозитория. Затем повторитеssh -T git@github.comиgit ls-remote originдля проверки доступа на чтение. - Настройте ~/.ssh/configЕсли на компьютере несколько ключей, откройте текстовый файл
~/.ssh/configв редакторе и задайте секциюHost github.com,HostName github.com,User git,IdentityFile ~/.ssh/id_ed25519,IdentitiesOnly yes, указав фактический ключ. Сохраните файл, а на Linux/macOS при предупреждении о слишком широких правах ограничьте разрешения конкретного закрытого ключа (chmod 600 ~/.ssh/id_ed25519). Перед изменением конфигурации сделайте её копию и проверьте, не используется ли она для другой учётной записи GitHub; в таком случае лучше отдельный псевдоним Host. - ДиагностикаЕсли ошибка не исчезла, выполните
ssh -vT git@github.comи найдите строкиOffering public keyиAuthentication succeededлибо причину отклонения. Не публикуйте закрытые ключи и полные файлы конфигурации. Если сеть блокирует порт 22, GitHub поддерживает SSH черезssh.github.comна порту 443 по своей документации; такую настройку задавайте только при подтверждённом сетевом ограничении, не отключая проверку ключа сервера. Если SSH прошёл, а push по-прежнему запрещён, проверьте права записи и защиту ветки — это отдельная неисправность.
#Конфигурация и команды
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes# По отдельности, после выбора ключа и проверки отпечатка GitHub:ssh -T git@github.comssh-add -l# Только если ключ ещё не создан:# ssh-keygen -t ed25519 -C "комментарий"# Только для уже существующего файла ключа:# ssh-add ~/.ssh/id_ed25519Если порт 22 закрыт в вашей сети, GitHub принимает SSH на порту 443: в ~/.ssh/config добавьте Host github.com / HostName ssh.github.com / Port 443. Не публикуйте закрытый ключ (файл без .pub) и не пересылайте его по почте. Подробнее — .