Как устранить ошибку Permission denied (publickey) при использовании Git? - PullRequest
531 голосов
/ 15 апреля 2010

Я на Mac Snow Leopard и только что установил git.

Я только что попробовал

git clone git@thechaw.com:cakebook.git

но это дает мне эту ошибку:

Initialized empty Git repository in `/Users/username/Documents/cakebook/.git/`
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

Чего мне не хватает?
Я также попытался сделать ssh-keygen без пароля, но все еще та же ошибка.

Ответы [ 37 ]

648 голосов
/ 15 апреля 2010

пользователь не сгенерировал пару открытых / закрытых ключей ssh, заданную ранее?

Эта информация работает с theChaw, но может применяться ко всем остальным git-репозиториям, которые поддерживают аутентификацию SSH-ключей (См. Гитолит , Гитлаб или Гитаб, например.)

Сначала начните с настройки собственного набора пар открытый / закрытый ключ. это может использовать DSA или RSA, поэтому в принципе любой ключ, который вы настроите, будет работать. На большинстве систем вы можете использовать ssh-keygen.

  • Сначала вы захотите перейти в ваш каталог .ssh. Откройте терминал и запустите:

    cd ~/.ssh && ssh-keygen

  • Далее вам нужно скопировать это в буфер обмена.
    • В OS X запустить: cat id_rsa.pub | pbcopy
    • В Linux запустить: cat id_rsa.pub | xclip
    • В Windows (через Cygwin / Git Bash) запустите: cat id_rsa.pub | clip
  • Добавьте свой ключ к своей учетной записи через веб-сайт.
  • Наконец-то настройте свой .gitconfig.
    • git config --global user.name "bob"
    • git config --global user.email bob@... (не забудьте перезапустить командную строку, чтобы убедиться, что конфигурация перезагружена)

Вот и все, что вам нужно, чтобы клонировать и оформить заказ.

Дополнительную информацию можно найти по https://help.github.com/articles/generating-ssh-keys (спасибо @Lee Whitney) -

пользователь сгенерировал пару открытых / закрытых ключей ssh, установленных ранее?

  • проверьте, какой ключ был авторизован в настройках вашей учетной записи github или gitlab
  • сообщает, какой соответствующий закрытый ключ должен быть связан с вашим локальным компьютером

eval $(ssh-agent -s)

скажите, где находятся ключи

ssh-add ~/.ssh/id_rsa

185 голосов
/ 23 декабря 2011

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

ssh -vT git@github.com

Источник: https://help.github.com/articles/error-permission-denied-publickey/

147 голосов
/ 09 мая 2013

Эта ошибка может возникать, когда вы обращаетесь к URL-адресу SSH (чтение / запись) вместо URL-адреса Git только для чтения, но у вас нет прав на запись в этот репозиторий.

Иногда вы просто хотите клонировать свое собственное репо, например развернуть на сервере. В этом случае вам нужен только доступ только для чтения. Но поскольку это ваше репо, GitHub может отображать URL-адрес SSH, если вы этого хотите. В этой ситуации, если открытый ключ вашего удаленного хоста отсутствует в SSH-ключах GitHub, ваш доступ будет запрещен, , что ожидается .

Эквивалентный случай - когда вы пытаетесь клонировать чужое хранилище, к которому у вас нет прав записи с SSH URL.

Одним словом, , если вы хотите клонировать репо, используйте HTTPS URL (https://github.com/{user_name}/{project_name}.git) вместо SSH URL (git@github.com:{user_name}/{project_name}.git), что позволяет избежать (ненужной) проверки открытого ключа .


Обновление: GitHub отображает HTTPS в качестве протокола по умолчанию, и этот шаг, вероятно, может уменьшить возможное неправильное использование URL-адресов SSH.

91 голосов
/ 29 ноября 2015

Справка github ссылка помогла мне разобраться с этой проблемой. Похоже, ключ ssh не был добавлен в ssh-agent. Это то, что я в итоге делал.

Команда 1:

Убедитесь, что ssh-agent включен. Команда запускает ssh-agent в фоновом режиме:

eval "$(ssh-agent -s)"

Команда 2:

Добавьте ваш SSH-ключ в ssh-agent:

ssh-add ~/.ssh/id_rsa
20 голосов
/ 07 января 2017

Это работает для меня:

ssh-add ~/.ssh/id_rsa
18 голосов
/ 18 января 2013

Обратите внимание, что (по крайней мере, для некоторых проектов) у вас должна быть учетная запись github с ключом ssh .

Посмотрите на ключи, перечисленные в вашем агенте аутентификации ( ssh-добавить -l )(если вы не видите ни одного, добавьте один из существующих ключей с помощью ssh-add / path / to / your / key (например: ssh-add ~ / .ssh / id_rsa ))(если у вас нет ключей, сначала создайте их. См .: http://rcsg -gsir.imsb-dsgi.nrc-cnrc.gc.ca / documents / internet / node31.html или просто Googlessh-keygen)

Чтобы убедиться, что у вас есть ключ, связанный с вашей учетной записью github :

Перейдите по адресу: https://github.com/settings/ssh

Вы должны увидетьхотя бы один ключ с хеш-ключом, совпадающим с одним из хешей, которые вы видели, когда вы набрали ssh-add -l минуту назад.

Если вы этого не сделаете, добавьте один, затемпопробуйте еще раз.

18 голосов
/ 04 января 2018

Получено то же сообщение об ошибке.

Исправлено использование HTTP вместо. Поскольку я не хочу устанавливать «ключи SSH» для тестового ПК.

Измените URL на HTTP при клонировании:

git clone https://github.com/USERNAME/REPOSITORY.git

Моя проблема немного отличается : У меня установлен URL при добавлении существующего локального репо в удаленный, используя:

git remote add origin ssh://github.com/USERNAME/REPOSITORY.git

Чтобы исправить это, сбросьте URL на HTTP:

git remote set-url origin https://github.com/USERNAME/REPOSITORY.git

Кстати, вы можете проверить свой URL, используя команду:

git remote -v
origin  https://github.com/USERNAME/REPOSITORY.git (fetch)
origin  https://github.com/USERNAME/REPOSITORY.git (push)

Надеюсь, это поможет кому-то вроде меня. : D

13 голосов
/ 17 декабря 2013

У меня была немного другая ситуация, я вошел на удаленный сервер и использовал git на сервере, когда я выполнил любую команду git, я получил то же сообщение

   Permission denied (publickey).
   fatal: The remote end hung up unexpectedly

Я исправил это, изменив файл / etc / ssh_config на моем Mac. от

ForwardAgent no 

до

ForwardAgent yes
12 голосов
/ 28 июля 2016

Я столкнулся с той же проблемой, потому что мне показалось, что разница между SSH и HTTPS равна

https://github.com/USERNAME/REPOSITORY.git

ssh://github.com/USERNAME/REPOSITORY.git

Таким образом, я изменил с HTTPS на SSH , просто изменив https:// на ssh:// ничего в конце URL не изменилось.

Но правда такова:

https://github.com/USERNAME/REPOSITORY.git

git@github.com:USERNAME/REPOSITORY.git

Это означает, что я изменил ssh://github.com/USERNAME/REPOSITORY.git на git@github.com:USERNAME/REPOSITORY.git, это работает.

Глупая ошибка, но надежда кому-то помогает!

11 голосов
/ 07 марта 2017

Я боролся с той же проблемой, что я и сделал, и я смог клонировать репо. Я следовал этой процедуре для iMac .

Первый шаг: проверка наличия открытого ключа SSH.

  1. Открыть терминал.
  2. Введите ls -al ~/.ssh, чтобы проверить наличие существующих ключей SSH:

Проверьте список каталогов, чтобы убедиться, что у вас уже есть открытый ключ SSH. Общедоступными по умолчанию являются один из следующих d_dsa.pub, id_ecdsa.pub, id_ed25519.pub, id_rsa.pub

Если вы не нашли, перейдите к шагу 2, в противном случае выполните шаг 3

Шаг 2: Генерация открытого ключа SSH

  1. Открыть терминал.
  2. Введите команду followong с вашим действительным адресом электронной почты, который вы используете для github ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  3. В терминале Generating public/private rsa key pair вы увидите следующее. Когда появится приглашение "Enter a file in which to save the key,", нажмите Enter. Это принимает местоположение файла по умолчанию. Когда появится запрос Enter a file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter] Просто нажмите Enter еще раз. В командной строке введите безопасную фразу-пароль.
  4. Enter passphrase (empty for no passphrase): [Type a passphrase] нажмите ввод, если вы не хотите Enter same passphrase again: [Type passphrase again] нажмите ввод еще раз

Это сгенерирует id_rsa.pub

Шаг 3: Добавление вашего SSH-ключа в ssh-agent

  1. Интерминальный тип eval "$(ssh-agent -s)"
  2. Добавьте ваш SSH-ключ в ssh-agent. Если вы используете существующий SSH ключ, а не генерация нового ключа SSH, вам нужно заменить id_rsa в команде с именем вашего существующего закрытого ключа файл. Введите эту команду $ ssh-add -K ~/.ssh/id_rsa

Теперь скопируйте ключ SSH и добавьте его в свою учетную запись github

  1. В терминале введите эту команду с именем вашего ssh-файла pbcopy < ~/.ssh/id_rsa.pub Это скопирует файл в буфер обмена Теперь откройте свою учетную запись github. Перейдите в Настройки> Ключи SSH и GPG> Новый ключ SSH Введите название, вставьте ключ из буфера обмена и сохраните его. Вуаля, вы сделали.
...