Ошибка: Permission denied (доступ запрещен) /публичный ключ/

Ошибка «Permission denied» (доступ запрещён) означает, что сервер отклонил ваше соединение. У этой ошибки может быть несколько причин; наиболее общие из них приведены ниже.

Можно ли использовать в Git команду sudo?

Вы не должны использовать команду sudo с Git. Если у вас есть веская причина использовать sudo, убедитесь, что вы используете её с каждой командой (возможо, лучше использовать su чтобы получить оболочку с правами суперпользователя (администратора) в этом месте). Если вы сгенерировали SSH-ключ без sudo, а затем пытаетесь использовать команду, подобную sudo git push, вы не должны использовать те же ключи, которые сгенерировали.

Проверьте, что вы подключились к нужному серверу

Будьте внимательны при вводе команд с клавиатуры. В некоторых случаях корпоративная сеть может привести к проблемам разрешения записи DNS.

Так как документ подготовлен в рамках курсов повышения квалификации «Правильный курс» , то и проверка подключения будет описана именно на этом примере.
Напомним, что доступ к репозиторию [email protected] организован по порту 25000, а не по стандартному для SSH порту 22. Поэтому в команде подключения вы должны явно указать номер порта.

Для того, чтобы убедиться в том, что вы подключаетесь к нужному домену, введите следующую команду, добавив в строке номер порта '-p 2500':

ssh -vT '-p 25000' [email protected]
OpenSSH_7.1p2, OpenSSL 1.0.2g 1 Mar 2016
debug1: Reading configuration data /с/Users/вы/.ssh/config
debug1: /c/Users/вы/.ssh/config line 1: Applying options for git.propercourse.ru
debug1: Reading configuration data /etc/ssh_config
Connecting to git.propercourse.ru [94.79.52.169] port 25000.
debug1: Connection established.

Всегда использовать пользователя «git»

Все соединения длджны выполняться под пользователем «git». Если вы попытаетесь соединиться под вашим псевдонимом в propercourse, соединение не установится:

ssh -T вы@git.propercourse.ru
Permission denied (publickey, password).

Вместо этого вы должны проверить соединение, набрав в строке:

Welcome to GitLab, пользователь!

Убедитесь, что у вас есть ключ, который используется

  1. Если вы используете Git Bash, включите ssh-agent:

    # start the ssh-agent in the background
    eval "$(ssh-agent -s)"
    Agent pid 59566
    Если вы используете другой командный процессор, такой как, например, Git для Windows, включите ssh-agent:
    # start the ssh-agent in the background
    eval "$(ssh-agent -s)"
    Agent pid 59566
  2. Проверьте, что у вас есть сгенерированный и загруженный в SSH приватный ключ.
    Если вы используете OpenSSH 6.7 или более ранний:

    ssh-add -l
    2048 a0:dd:42:3c:5a:9d:e4:2a:21:52:4e:78:07:6e:c8:4d /Users/вы/.ssh/id_rsa (RSA)
    Если вы используете OpenSSH 6.8 или более позднюю:
    ssh-add -l -E md5
    2048 MD5:a0:dd:42:3c:5a:9d:e4:2a:21:52:4e:78:07:6e:c8:4d /Users/вы/.ssh/id_rsa (RSA)

Команда ssh-add должна вывести длинную строку из цифр и букв. Если ничего не будет выведено на экран, вы должны сгенерировать новый SSH-ключ и связать его с GitLab.

Замечание. В большинстве систем приватные ключи по умолчанию (~/.ssh/id_rsa, ~/.ssh/id_dsa и ~/.ssh/identity) автоматически добавляются к агенту аутентификации SSH. Вы не должны запускать ssh-add path/to/key, иначе вы перезапишите имя файла при генерации ключа.

Получение детализации

Вы можете также проверить, что ключ используется при попытках соединения с [email protected]:

ssh -vT '-p 25000' [email protected]
...
debug1: identity file /Users/вы/.ssh/id_rsa type -1
debug1: identity file /Users/вы/.ssh/id_rsa-cert type -1
debug1: identity file /Users/вы/.ssh/id_dsa type -1
debug1: identity file /Users/вы/.ssh/id_dsa-cert type -1
...
debug1: Authentications that can continue: publickey, password
debug1: Next authentication method: publickey
debug1: Trying private key: /Users/you/.ssh/id_rsa
debug1: Trying private key: /Users/you/.ssh/id_dsa
debug1: No more authentication methods to try.
Permission denied (publickey).

В этом примере у нас нет ключей для использования SSH. Значение «-1» в конце строки «identity file» означает, что SSH не может найти файла для использования. Ниже, строка «Trying private key» также показывает, что файл не найден. Если бы файл был найден, значение в этих строках было бы «1», и «Offering public key» соответственно.

ssh -vT '-p 25000' [email protected]
...
debug1: identity file /Users/вы/.ssh/id_rsa type 1
...
debug1: Authentications that can continue: publickey, password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: C:\\Users\\вы\\.ssh\\id_rsa

Проверка привязки публичного ключа к вашей учётной записи

Вы должны предоставить ваш публичный ключ GitLab чтобы установить защищённое соединение.

  1. Откройте командную строку.

  2. Запустите SSH-agent в фоновом режиме:

    ssh-agent -s
    Agent pid 59566
  3. Найдите и возьмите на заметку отпечаток вашего публичного ключа. Если вы используете OpenSSH 6.7 или более раннюю:

    ssh-add -l
    2048 a0:dd:42:3c:5a:9d:e4:2a:21:52:4e:78:07:6e:c8:4d /Users/ИМЯ_ПОЛЬЗОВАТЕЛЯ/.ssh/id_rsa (RSA)
    Если вы используете OpenSSH 6.8 или более позднюю:
    ssh-add -l -E md5
    2048 MD5:a0:dd:42:3c:5a:9d:e4:2a:21:52:4e:78:07:6e:c8:4d /Users/ИМЯ_ПОЛЬЗОВАТЕЛЯ/.ssh/id_rsa (RSA)
  4. Авторизуйтесь в репозитории центра компетенций «Правильный курс» и перейдите на вкладку «Profile settings / SSH Keys».
    Проверка привязки ключа к учётной записи

  5. Сравните список ключей в поле «Your SSH keys» со списком, полученным в результате выполнения команды ssh-add.
    Если публичные ключи отсутствуют в вашем профиле в GitLab, вам нужно добавить их и ассоциировать с вашим компьютером.

Внимание! Если вы обнаружили незнакомый вам SSH-ключ немедленно удалите его и свяжитесь с поддержкой GitLab. Неопознанный публичный ключ может означать потенциальную проблему в защите.