Back

Исправление ошибки 'Permission denied (publickey)' при отправке в GitHub

Исправление ошибки 'Permission denied (publickey)' при отправке в GitHub

Получаете ошибку ‘Permission denied (publickey)’ при попытке отправить изменения в GitHub? Эта ошибка означает, что GitHub не может аутентифицировать вас из-за проблемы с SSH-ключом. Давайте быстро это исправим.

Ключевые моменты

  • Ошибка возникает, когда GitHub не может аутентифицировать ваше SSH-соединение
  • Три основные причины: отсутствие SSH-ключей, ключи не добавлены в GitHub или неправильный формат URL удалённого репозитория
  • Проверьте соединение командой ssh -T git@github.com, чтобы убедиться, что проблема решена
  • SSH-агент и конфигурационные файлы помогают управлять несколькими учётными записями или постоянной аутентификацией

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

Ошибка ‘Permission denied (publickey)’ возникает, когда Git пытается подключиться к GitHub через SSH, но аутентификация не проходит. Представьте SSH-ключи как специальный пароль, который позволяет вашему компьютеру безопасно общаться с GitHub.

Это руководство охватывает три основные причины и показывает, как именно исправить каждую из них.

Три основные причины (и способы их устранения)

1. SSH-ключи не созданы на вашем компьютере

Быстрая проверка:

ls -la ~/.ssh

Если вы видите “No such file or directory” или папка пуста, вам нужно создать SSH-ключи.

Решение: Сгенерируйте новую пару SSH-ключей:

ssh-keygen -t ed25519 -C "your-email@example.com"

Нажмите Enter три раза, чтобы принять значения по умолчанию. Это создаст два файла:

  • ~/.ssh/id_ed25519 (приватный ключ — храните его в секрете)
  • ~/.ssh/id_ed25519.pub (публичный ключ — делитесь с GitHub)

2. Публичный ключ не добавлен в GitHub

Даже при наличии созданных SSH-ключей GitHub не распознает вас, пока вы не добавите свой публичный ключ в свою учётную запись.

Решение: Сначала скопируйте свой публичный ключ:

cat ~/.ssh/id_ed25519.pub

Затем добавьте его в GitHub:

  1. Перейдите в настройки SSH на GitHub
  2. Нажмите “New SSH key”
  3. Вставьте ваш ключ и сохраните

3. Неправильный формат URL удалённого репозитория

SSH URL для GitHub должен начинаться с git@github.com: — не с вашего email или имени пользователя.

Проверьте текущий URL:

git remote -v

Правильный формат:

git@github.com:username/repository.git

Неправильные форматы:

youremail@github.com:username/repository.git  ❌
https://github.com/username/repository.git    ❌ (это HTTPS, а не SSH)

Решение: Обновите на правильный SSH URL:

git remote set-url origin git@github.com:username/repository.git

Проверка работоспособности

Протестируйте ваше SSH-соединение с GitHub:

ssh -T git@github.com

Вы должны увидеть:

Hi username! You've successfully authenticated...

Если это работает, теперь вы можете отправлять изменения в GitHub без ошибки отказа в доступе.

Распространённые проблемы и их решение

SSH-агент не запущен

Если ваш ключ существует, но всё равно не работает, возможно, SSH-агент не запущен.

Решение:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

Несколько учётных записей GitHub

Управление несколькими учётными записями требует конфигурационного файла SSH. Создайте ~/.ssh/config:

Host github.com-work
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_work

Host github.com-personal
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_personal

Затем клонируйте, используя:

git clone git@github.com-work:company/repository.git

Особенности для разных платформ

  • Пользователи Windows: Используйте Git Bash вместо Command Prompt или PowerShell
  • Пользователи macOS/Linux: Используйте Terminal

Обе платформы используют одинаковые команды, показанные выше.

Заключение

Ошибка ‘Permission denied (publickey)’ раздражает, но легко исправляется. В большинстве случаев вам просто нужно создать SSH-ключи и добавить публичный ключ в GitHub. Не забудьте проверить соединение командой ssh -T git@github.com перед отправкой изменений.

После правильной настройки вы больше никогда не увидите эту ошибку для данного репозитория.

Часто задаваемые вопросы

Хотя технически это возможно, рекомендуется создавать отдельные пары ключей для каждой учётной записи. Это повышает безопасность и упрощает диагностику проблем при управлении различными репозиториями.

SSH удобнее после настройки, так как не требует паролей при каждой отправке. HTTPS работает везде, но требует токенов аутентификации или паролей для каждой операции.

Нет. Добавьте ваш ключ в SSH-агент с помощью ssh-add, чтобы кэшировать парольную фразу на время сеанса. Таким образом, вы введёте её только один раз за сеанс.

Немедленно сгенерируйте новую пару ключей и обновите GitHub новым публичным ключом. Удалите скомпрометированный ключ из настроек GitHub и никогда не делитесь приватными ключами.

Understand every bug

Uncover frustrations, understand bugs and fix slowdowns like never before with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay