Ошибка Permission denied (publickey) в Git
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.Сервер не принял ни одного вашего SSH-ключа.
Проверьте подключение
Выполните проверку отдельно от Git — в том же терминале и без sudo:
ssh -T git@github.comСнова «Permission denied (publickey)»дело в ключе
Проверьте по порядку.
1. Ключа нет
ls ~/.sshНужна пара файлов вида id_ed25519 и id_ed25519.pub (или id_rsa и id_rsa.pub). Если папки или файлов нет — ключ ещё не создан. Как создать и добавить — в справке Как добавить SSH-ключ для GitHub.
2. Ключ не добавлен на сайт
Откройте на сайте настройки учётной записи (на GitHub — Settings → SSH and GPG keys) и проверьте, что там есть ключ с этого компьютера. Сравнить можно по отпечатку: команда
ssh-keygen -lf ~/.ssh/id_ed25519.pubвыводит строку с SHA256:… — такой же отпечаток GitHub показывает у добавленного ключа. Частая ошибка — ключ добавлен в другую учётную запись или скопирован не целиком.
3. Ключ лежит под другим именем
SSH сам пробует только ключи со стандартными именами (id_ed25519, id_rsa и ещё несколько) и ключи, загруженные в ssh-agent (программу, которая держит ключи наготове). Ключ с другим именем укажите в файле ~/.ssh/config (создайте его, если нет):
Host github.com
IdentityFile ~/.ssh/github_keyПодставьте путь к своему закрытому ключу (без .pub).
Ответ «Hi …!»ключ работает
Ответ вида Hi ivan! You've successfully authenticated значит, что дело не в ключе, а в том, как запущен Git, в адресе репозитория или в правах доступа к нему.
Команда запущена через sudo
С sudo SSH ищет ключи пользователя root, а не ваши. Запускайте git без sudo. Если не хватает прав на папку репозитория, исправьте владельца папки, а не запускайте Git от root.
Неверный адрес
git remote -vАдрес по SSH должен начинаться с git@: git@github.com:ivan/todo.git. Вместо git в начале не должно быть имени вашей учётной записи. Исправить — git remote set-url origin git@github.com:ivan/todo.git.
Нет доступа к репозиторию
Если ssh -T здоровается с вами по имени, а git push всё равно не проходит, у этой учётной записи нет прав на запись в репозиторий (или его нет по этому адресу — тогда ошибка обычно Repository not found). Попросите владельца добавить вас в участники или работайте через форк (свою копию чужого репозитория на сайте).
Подробности подключения
Если ничего не помогло, посмотрите, какие ключи SSH пробует:
ssh -vT git@github.comВ выводе ищите строки Offering public key — какой ключ предложен — и Authentications that can continue — сервер ключ не принял. Строки identity file … type -1 означают, что такого файла нет.
В подробном выводе нет закрытого ключа, но есть имя пользователя компьютера и пути к файлам. Если выкладываете его на форум, просмотрите и уберите лишнее. Закрытый ключ не показывайте никому.
Хотя бы на время можно обойтись без SSH: склонировать и отправлять по адресу HTTPS (https://github.com/ivan/todo.git) — со входом через окно Git Credential Manager или по токену.