Исправление ошибки 'Permission denied (publickey)' при отправке в GitHub
Исправление ошибки Permission denied publickey на GitHub требует генерации SSH-ключей, добавления публичного ключа в настройки GitHub и проверки SSH-соединения.
Получаете ошибку ‘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:
- Перейдите в настройки SSH на GitHub
- Нажмите “New SSH key”
- Вставьте ваш ключ и сохраните
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
Discover how at OpenReplay.com.
Проверка работоспособности
Протестируйте ваше 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-ключ для нескольких учётных записей GitHub?
Хотя технически это возможно, рекомендуется создавать отдельные пары ключей для каждой учётной записи. Это повышает безопасность и упрощает диагностику проблем при управлении различными репозиториями.
Что лучше использовать для GitHub: SSH или HTTPS?
SSH удобнее после настройки, так как не требует паролей при каждой отправке. HTTPS работает везде, но требует токенов аутентификации или паролей для каждой операции.
Мой SSH-ключ защищён парольной фразой. Нужно ли вводить её каждый раз?
Нет. Добавьте ваш ключ в SSH-агент с помощью ssh-add, чтобы кэшировать парольную фразу на время сеанса. Таким образом, вы введёте её только один раз за сеанс.
Что делать, если я случайно поделился своим приватным SSH-ключом?
Немедленно сгенерируйте новую пару ключей и обновите GitHub новым публичным ключом. Удалите скомпрометированный ключ из настроек GitHub и никогда не делитесь приватными ключами.