Глиф Учебники

Ошибка Permission denied (publickey) в Git

Справочник · Git · 2 минуты чтения

Текст
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:

Bash
ssh -T git@github.com

Снова «Permission denied (publickey)»дело в ключе

Проверьте по порядку.

1. Ключа нет

Bash
ls ~/.ssh

Нужна пара файлов вида id_ed25519 и id_ed25519.pub (или id_rsa и id_rsa.pub). Если папки или файлов нет — ключ ещё не создан. Как создать и добавить — в справке Как добавить SSH-ключ для GitHub.

2. Ключ не добавлен на сайт

Откройте на сайте настройки учётной записи (на GitHub — Settings → SSH and GPG keys) и проверьте, что там есть ключ с этого компьютера. Сравнить можно по отпечатку: команда

Bash
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.

Неверный адрес

Bash
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 пробует:

Bash
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 или по токену.