Skip to main content

Ошибка: отказано в разрешении (publickey)

Ошибка "Отказано в разрешении" означает, что сервер отклонил подключение. Ниже приведено несколько причин и разъяснение по самым распространенным примерам.

Следует ли использовать команду sudo или более высокий уровень привилегий с GIT?

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

Проверка подключения к правильному серверу

Правильно вводить текст не так уж легко. Будьте внимательны при вводе: вы не сможете подключиться к githib.com или guthub.com. В некоторых случаях в корпоративной сети также могут возникнуть проблемы с разрешением записи DNS.

Чтобы убедиться в том, что вы подключаетесь к нужному домену, можно ввести следующую команду:

$ ssh -vT git@HOSTNAME
> OpenSSH_8.1p1, LibreSSL 2.7.3
> debug1: Reading configuration data /Users/YOU/.ssh/config
> debug1: Reading configuration data /etc/ssh/ssh_config
> debug1: /etc/ssh/ssh_config line 47: Applying options for *
> debug1: Connecting to HOSTNAME port 22.

Подключение должно выполняться через порт 22.

Подключение с помощью пользователя git

Все подключения, в том числе к удаленным URL-адресам, должны выполняться от имени пользователя git. Если вы попытаетесь подключиться с именем пользователя GitHub Enterprise Server, произойдет сбой:

$ ssh -T GITHUB-USERNAME@HOSTNAME
> Permission denied (publickey).

Если подключение завершилось сбоем и вы используете удаленный URL-адрес с именем пользователя GitHub Enterprise Server, вы можете переключить удаленный URL-адрес на пользователя git.

Чтобы проверить подключение, введите следующую команду:

$ ssh -T git@HOSTNAME
> Hi USERNAME! You've successfully authenticated...

Проверка наличия используемого ключа

  1. Откройте ТерминалТерминалGIT Bash.
  2. Убедитесь в наличии закрытого ключа, созданного и загруженного в SSH.
    # start the ssh-agent in the background
    $ eval "$(ssh-agent -s)"
    > Agent pid 59566
    $ ssh-add -l -E sha256
    > 2048 SHA256:274ffWxgaxq/tSINAykStUL7XWyRNcRTlcST1Ei7gBQ /Users/USERNAME/.ssh/id_rsa (RSA)

Если у вас установлено приложение GitHub Desktop, его можно использовать для клонирования репозиториев, не прибегая к ключам SSH.

  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.

    $ ssh-add -l -E sha256
    > 2048 SHA256:274ffWxgaxq/tSINAykStUL7XWyRNcRTlcST1Ei7gBQ /Users/USERNAME/.ssh/id_rsa (RSA)
  1. Откройте ТерминалТерминалGIT Bash.
  2. Убедитесь в наличии закрытого ключа, созданного и загруженного в SSH.
    $ ssh-add -l -E sha256
    > 2048 SHA256:274ffWxgaxq/tSINAykStUL7XWyRNcRTlcST1Ei7gBQ /Users/USERNAME/.ssh/id_rsa (RSA)

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

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

Получение дополнительных сведений

Вы также можете проверить, используется ли ключ, попытавшись подключиться к git@[hostname]:

$ ssh -vT git@HOSTNAME
> ...
> debug1: identity file /Users/YOU/.ssh/id_rsa type -1
> debug1: identity file /Users/YOU/.ssh/id_rsa-cert type -1
> debug1: identity file /Users/YOU/.ssh/id_dsa type -1
> debug1: identity file /Users/YOU/.ssh/id_dsa-cert type -1
> ...
> debug1: Authentications that can continue: publickey
> 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 git@HOSTNAME
> ...
> debug1: identity file /Users/YOU/.ssh/id_rsa type 1
> ...
> debug1: Authentications that can continue: publickey
> debug1: Next authentication method: publickey
> debug1: Offering RSA public key: /Users/YOU/.ssh/id_rsa

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

Чтобы установить безопасное подключение, необходимо предоставить GitHub Enterprise Server открытый ключ.

  1. Откройте терминал.

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

    $ eval "$(ssh-agent -s)"
    > Agent pid 59566
  3. Найдите и запишите отпечаток открытого ключа.

    $ ssh-add -l -E sha256
    > 2048 SHA256:274ffWxgaxq/tSINAykStUL7XWyRNcRTlcST1Ei7gBQ /Users/USERNAME/.ssh/id_rsa (RSA)
  4. В правом верхнем углу любой страницы щелкните фотографию профиля, а затем выберите Параметры.

    Значок "Настройки" на панели пользователя

  5. В разделе "Безопасность" на боковой панели щелкните Ключи SSH и GPG.

  6. Сравните список ключей SSH с выходными данными команды ssh-add. Список ключей SSH в GitHub Enterprise Server

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

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

    $ ssh-agent -s
    > Agent pid 59566
  3. Найдите и запишите отпечаток открытого ключа.

    $ ssh-add -l -E sha256
    > 2048 SHA256:274ffWxgaxq/tSINAykStUL7XWyRNcRTlcST1Ei7gBQ /Users/USERNAME/.ssh/id_rsa (RSA)
  4. В правом верхнем углу любой страницы щелкните фотографию профиля, а затем выберите Параметры.

    Значок "Настройки" на панели пользователя

  5. В разделе "Безопасность" на боковой панели щелкните Ключи SSH и GPG.

  6. Сравните список ключей SSH с выходными данными команды ssh-add. Список ключей SSH в GitHub Enterprise Server

  1. Откройте терминал.

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

    $ eval "$(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/USERNAME/.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/USERNAME/.ssh/id_rsa (RSA)
  4. В правом верхнем углу любой страницы щелкните фотографию профиля, а затем выберите Параметры.

    Значок "Настройки" на панели пользователя

  5. В разделе "Безопасность" на боковой панели щелкните Ключи SSH и GPG.

  6. Сравните список ключей SSH с выходными данными команды ssh-add. Список ключей SSH в GitHub Enterprise Server

Если открытый ключ отсутствует в GitHub Enterprise Server, необходимо добавить ключ SSH в GitHub Enterprise Server, чтобы связать его с компьютером.

Предупреждение. Если вы видите ключ SSH, который вам неизвестен, в GitHub Enterprise Server, сразу удалите его и обратитесь к your site administrator для получения дополнительной помощи. Неопознанный открытый ключ может указывать на возможную проблему безопасности. Дополнительные сведения см. в статье Просмотр ключей SSH.