Skip to main content

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

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

Platform navigation

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

Команду sudo или более высокий уровень привилегий, например разрешения администратора, не следует использовать с GIT.

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

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

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

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

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

Shell
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
    

    Примечание. Команды eval, приведенные выше, запускают ssh-agent вручную в вашей среде. Эти команды могут завершиться ошибкой, если ssh-agent уже выполняется как фоновая системная служба. В этом случае рекомендуется проверка соответствующую документацию для вашей среды.

  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:

Shell
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" в конце строк "файл удостоверений" означает, что SSH не удалось найти файл для использования.
  • Строки "Попробовать закрытый ключ" указывают, что файл не найден.

Если файл существует, эти строки будут иметь значение "1" и "Предложение открытого ключа", как в этом выходных данных:

> ...
> 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. В правом верхнем углу любой страницы на GitHubщелкните фото профиля, а затем нажмите кнопку "Параметры".

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

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

  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. В правом верхнем углу любой страницы на GitHubщелкните фото профиля, а затем нажмите кнопку "Параметры".

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

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

  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. В правом верхнем углу любой страницы на GitHubщелкните фото профиля, а затем нажмите кнопку "Параметры".

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

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

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

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