Git LinuxWindowsmacOS

Git: Permission denied (publickey) при работе с GitHub по SSH

  • Обновлено
  • Чтение ≈ 4 минуты

Краткий ответ

«Permission denied (publickey)» при работе с GitHub по SSH значит, что у GitHub нет вашего публичного ключа или ssh не использует нужный закрытый. Сгенерируйте ключ, добавьте в аккаунт, запустите ssh-agent и проверьте командой ssh -T.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение
  4. Конфигурация и команды

#Что означает ошибка

Сообщение
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.

#Пошаговое решение

  1. Проверьте подключениеВ папке проекта откройте терминал и выполните git remote -v. Если удалённый адрес начинается с git@github.com:, используется SSH; если https://github.com/, эта статья неприменима. Запустите ssh -T git@github.com: при первом подключении SSH может предложить подтвердить подлинность сервера. Сверьте опубликленный GitHub отпечаток SSH-ключа сервера с официальной документацией, прежде чем вводить yes; не принимайте неизвестный ключ. Успешная аутентификация обычно сообщает имя учётной записи и то, что shell-доступ не предоставляется. Если Permission denied (publickey) остаётся, продолжайте.
  2. Создайте ключПроверьте, существует ли у вас подходящий SSH-ключ: Linux/macOS — ls -l ~/.ssh/*.pub, Windows PowerShell — Get-ChildItem $HOME/.ssh/*.pub. Если файла id_ed25519.pub нет, создайте новую пару в своём профиле командой ssh-keygen -t ed25519 -C "комментарий", заменив комментарий почтой или названием устройства. Если программа спрашивает, перезаписать существующий ключ, ответьте n: это может лишить доступа к другим серверам. При создании задайте парольную фразу для закрытого ключа и запишите выбранный путь. Никому не отправляйте файл без расширения .pub.
  3. Запустите агент и добавьте ключЕсли ключ уже есть, проверьте, загружен ли он в агент: в 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.
  4. Добавьте открытый ключ в GitHubОткройте свою учётную запись GitHub → фото профиля → Settings → SSH and GPG keys → New SSH key. Через терминал прочитайте только открытый ключ: Linux/macOS cat ~/.ssh/id_ed25519.pub, Windows PowerShell Get-Content $HOME/.ssh/id_ed25519.pub. Скопируйте полную строку ssh-ed25519 ... в поле Key, задайте понятное имя в Title и сохраните. Не вставляйте закрытый ключ и не добавляйте ключ в чужую учётную запись; доступ к организации и репозиторию определяется отдельно, одной аутентификации недостаточно.
  5. Проверьте 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 для проверки доступа на чтение.
  6. Настройте ~/.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.
  7. ДиагностикаЕсли ошибка не исчезла, выполните ssh -vT git@github.com и найдите строки Offering public key и Authentication succeeded либо причину отклонения. Не публикуйте закрытые ключи и полные файлы конфигурации. Если сеть блокирует порт 22, GitHub поддерживает SSH через ssh.github.com на порту 443 по своей документации; такую настройку задавайте только при подтверждённом сетевом ограничении, не отключая проверку ключа сервера. Если SSH прошёл, а push по-прежнему запрещён, проверьте права записи и защиту ветки — это отдельная неисправность.

#Конфигурация и команды

~/.ssh/config
Явное указание ключа для GitHub.
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519
    IdentitiesOnly yes
Linux · Терминал (Bash)Команда
Не запускайте как единую цепочку: создание ключа и добавление в агент — условные действия. Для Windows синтаксис агента отличается.
# По отдельности, после выбора ключа и проверки отпечатка GitHub:
ssh -T git@github.com
ssh-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) и не пересылайте его по почте. Подробнее — документация GitHub.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 1 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.