Как устранить ошибку Permission denied (publickey) при использовании Git?


632

Я на 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без пас-фазы, но все еще та же ошибка.


8
Вы пытались загрузить открытый ключ, который вы сгенерировали с помощью ssh-keygen?
Патрик Корнелиссен

Моя проблема заключалась в том, что я пытался клонировать от sudo- это другой пользователь с другим открытым ключом.
Виталий Зданевич

та же ошибка. Ранее я создал открытый ключ через github, затем сгенерировал еще одну пару ключей с помощью ssh-keygenутилиты. Удаление старого открытого ключа в личных настройках на github и добавление моего сгенерированного ssh ключа id_rsa.pub к ключам SSH и GPG устранило проблемы с разрешением клонирования.
Таннер Долби

Ответы:


774

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

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

Сначала начните с настройки собственного набора пар открытый / закрытый ключ. Это может использовать либо 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


6
Хорошо. На самом деле это не мерзавец, а проблема с ssh-синхронизацией. Я получил то же самое с Ассембла, и ваша ссылка помогла мне решить это. Спасибо !
Александр Бурлье

Этот ответ полезен, но кажется более полным и таким же простым, если вы генерируете ключи с нуля: help.github.com/articles/generating-ssh-keys
whitneyland

6
У меня возникла проблема с кейгеном. Он чувствителен к адресу электронной почты в глобальной переменной env. Если у вас возникла эта проблема, вы должны указать адрес электронной почты для вашей учетной записи на github на первом шаге: ssh-keygen -t rsa -C "your_email@youremail.com"
melchoir55

30
Если это все еще не работает, вам нужно ssh-add ~/.ssh/id_rsa.
Михаил Литвин

1
Копирование с использованием xclipв Linux работало только путем выполнения следующих действий, xclip -sel clip < ~/.ssh/id_rsa.pubперечисленных здесь: help.github.com/articles/generating-ssh-keys
Пэт Мильяччио

217

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

ssh -vT git@github.com

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


1
Моя проблема была связана с наличием другого ключа для моего сервера. Как только я использовал вышеупомянутую команду, чтобы определить проблему, я исправил IdentifyFile в моем файле конфигурации, и это работало.
Джари Боландер

1
Показал, какой ключ github пытался использовать для аутентификации. v полезно
cdosborn

9
Это ничего не исправит. Я все еще получаю ошибку в вопросе ОП.
Игорь Ганапольский

5
Команда предназначена для того, чтобы помочь вам решить проблему, это не волшебное переключение «исправь это для меня».
stevek

2
Я не могу сказать, что это что-то решило, но это чертовски интересная команда, которая работает и с GitHub Enterprise.
Hack-R

164

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

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


С https://github.comgit url, это все еще говорит SSL certificate problem: self signed certificate in certificate chain. git -c http.sslVerify=false clone ...кажется опасным ходом. Chrome не дает никаких предупреждений ssl. Мысли?
Джейсон Клебан

1
@ uosɐſ Извините, но я никогда не сталкивался с этой проблемой. Возможно, первое, что нужно сделать, это попробовать ту же команду с другого компьютера и посмотреть, не исчезнет ли проблема.
Кавиняо

1
Это сделало это и для меня тоже. Спасибо. Чтобы клонировать мое git-репо на мою учетную запись общего хостинга (1 и 1), мне пришлось воспользоваться. git clone https://github.com/MyUserName/MyRepo.git Просто нажмите на текстовые ссылки под URL-адресом репо справа от страницы Github, где написано: « Вы можете клонировать с HTTPS, SSH или Subversion. . " (Нажмите HTTPS, чтобы получить ссылку вместо стандартного SSH .)
Оливер Шафельд

БЛАГОДАРЮ ВАС!!!!!!
Шарл Шериф

Отличный ответ. Наконец кто-то объясняет, почему это так работает.
Qback

104

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

Команда 1:

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

eval "$(ssh-agent -s)"

Команда 2:

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

ssh-add ~/.ssh/id_rsa

7
После обновления до OSx El Capitan до Sierra это сработало для меня.
Лоуки

7
Работай у меня после обновления до macOS Sierra =)
Адриано Резенде

Это сработало для меня на Raspberry Pi, где ssh-add имеет флаг "-k" вместо "-K", по-видимому. Но как только я добавил свой ключ развертывания, я смог успешно клонировать репозиторий, используя его ссылку SSH.
Джош

34

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

Исправлено использование 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



21

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

Посмотрите на ключи, перечисленные в вашем агенте аутентификации ( ssh-add -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 или просто гугл сш-кейген)

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

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

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

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


Это сработало для меня. Это случилось со мной, потому что мой ключ не был добавлен к агенту аутентификации. Спасибо.
antonD

19

Я боролся с той же проблемой, что я и сделал, и я смог клонировать репо. Я следовал этой процедуре для 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». Введите название, вставьте ключ из буфера обмена и сохраните его. Вуаля, вы сделали.

2
Пользователь Windows копирует через: cat ~ / .ssh / id_rsa.pub | клип
Фабии

1
Наконец после прочтения здесь и там в течение часа, пошаговое решение .... отлично работает. Не забудьте добавить свой пароль github в качестве парольной фразы в действиях, в противном случае придется добавлять вручную каждый раз
Afshin Ghazi

13

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

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

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

ForwardAgent no 

в

ForwardAgent yes

Произошла ошибка при попытке получить драгоценные камни из github с виртуальной машины VirtualBox. Обновил мой Vagrantfile для использования config.ssh.forward_agent = true, перезапустил ВМ, и теперь он работает.
Крис Блум

1
Возможно, это не лучший выбор с точки зрения безопасности: heipei.github.io/2015/02/26/…
папа

13

Я встретил ту же проблему из - за меня думал , разница между 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это работает.

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


да, я изменился ssh://github.com/USERNAME/REPOSITORY.gitна git@github.com:USERNAME/REPOSITORY.gitэто работает.
Уильям Ху

Конечно. Я просто говорю, что не вижу смысла упоминать https;)
OneCricketeer

Я вижу, потому что я просто использую sshвместо того, httpsчтобы я просто изменил 'https: //' на 'ssh: // `, тогда я получил ошибку. Так что поменяйте 'ssh: // git /../ `на' git @ .. /":) Отредактировал мой ответ.
Уильям Ху,

Меня устраивает. Большое спасибо! Я попробовал https, а затем ssh, но он по-прежнему отказывает в доступе, пока вы не сделаете свой путь с помощью "git clone git@github.com: /myusername/myproject.git".
Тач Ван

6

В Windows убедитесь, что все ваши приложения согласны с HOME. Msys на удивление НЕ сделает это за вас. Мне пришлось установить переменную окружения, потому что ssh и git не могли договориться о том, где находится мой каталог .ssh.


6

Вы в корпоративной среде ? Возможно ли, что ваши системные переменные недавно изменились? Согласно такому ответу, ключи ssh живут в %HOMEDRIVE%%HOMEPATH%\.ssh\id_rsa.pub. Так что, если он был %HOMEDRIVE%недавно изменен, git не знает, где искать ваш ключ, и, следовательно, весь материал для аутентификации.

Попробуйте запустить ssh -vT git@github.com. Обратите внимание, где identity fileнаходится. Для меня это указывало не на мой обычный, \Users\MyLoginа скорее на сетевой диск из-за изменения переменных среды, выдвигаемых на уровне сети.

Решение? Так как мои новые %HOMEDRIVE%имеют те же права доступа, что и мои локальные файлы, я просто переместил туда свою папку .ssh и назвал ее день.


эта работа для меня. вчера мой ключ ssh работал, но сегодня некоторые настройки моей системы изменились. Я просто добавил тссс снова, и теперь он работает.
Хитеш Агарвал

6

Ребята, вот как это работает для меня:

  1. Откройте терминал и перейдите к пользователю [см. Прикрепленное изображение]
  2. Откройте папку .ssh и убедитесь, что в ней нет файлов, таких как id_rsa или id_rsa.pub, в противном случае иногда она не будет правильно переписывать файлы
  3. git --version [Проверить установку и версию git]
  4. git config --global user.email "ваш идентификатор электронной почты"
  5. git config --global user.name "ваше имя"
  6. git config --list [убедитесь, что вы указали свое имя и адрес электронной почты]
  7. cd ~ / .ssh
  8. ssh-keygen, запрашивает сохранение файла, разрешает
  9. cat ~ / .ssh / id_rsa.pub [Доступ к вашему публичному ключу и копирование ключа в настройки gerrit]

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

введите описание изображения здесь

введите описание изображения здесь


5

В основных инструкциях GIT не упоминается о ключах SSH. Перейдя по некоторым из приведенных выше ссылок, я нашел страницу справки git, в которой пошагово объясняется, как именно это сделать для различных операционных систем (ссылка будет определять вашу ОС и, соответственно, перенаправлять):

http://help.github.com/set-up-git-redirect/

Он просматривает все необходимое для GITHub, а также дает подробные объяснения, такие как «зачем добавлять ключевую фразу при создании ключа RSA». Я решил опубликовать это, если это поможет кому-то еще ...


5

Один из самых простых способов

перейти к терминалу

  git push <Git Remote path> --all


3

Если у вас есть более одного ключа, вам может понадобиться ssh-add private-keyfile


Большое спасибо! Это действительно было моей проблемой.
GoGreen

[root @ li566-238 hanjiyun] # ssh-add private-keyfile private-keyfile: нет такого файла или каталога
JY Han

3

Я столкнулся с этой ошибкой, потому что мне нужно было предоставить текущему рабочему каталогу разрешения 700:

chmod -R 700 /home/ec2-user/

3

Мне пришлось скопировать мои ключи SSH в корневую папку. Google Cloud Compute Engine под управлением Ubuntu 18.04

sudo cp ~/.ssh/* /root/.ssh/

2

Я только что столкнулся с этой проблемой при настройке моего текущего проекта, и ни одно из вышеуказанных решений не работает. поэтому я попытался посмотреть, что на самом деле происходит в списке отладки, используя команду ssh -vT git@github.com. Я заметил, что моего закрытого ключа с именем файла нет в списке. поэтому переименовав имя файла с закрытым ключом в id_rsa, сделайте свою работу. надеюсь, это поможет.


Бесполезно в тех случаях, когда вы используете ключ "id_rsa" для чего-либо еще ...
random_user_name

2

Это довольно просто. Введите следующую команду

ssh-keygen -t rsa -b 4096 -C "youremailid@yourdomain.com"

Сгенерируйте ключ SSH. Откройте файл и скопируйте содержимое. Перейдите на страницу настроек GitHub и нажмите на ключ SSH. Нажмите Добавить новый ключ SSH и вставьте содержимое здесь. Вот и все :) Вы не должны видеть проблему снова.


1

Я получал похожую ошибку «Отказано в доступе (publickey)» при попытке запустить make-файл.

В качестве альтернативы вышеприведенным шагам SSH вы можете установить собственное приложение GitHub для Mac.

Нажмите Загрузить GitHub для Mac по адресу - https://help.github.com/articles/set-up-git#platform-mac.

Как только вы завершите настройку с помощью своей учетной записи git hub (я также установил инструменты командной строки git hub, но не уверен, требуется ли этот шаг или нет), я получил электронное письмо -

[GitHub] Новый открытый ключ был добавлен в ваш аккаунт

и моя ошибка была исправлена.


1

Я получаю ту же ошибку. Моя проблема сводилась к смешиванию в sudo.

Я не мог создать каталог, в который я клонировал автоматически, без префикса команды git clone с sudo. Однако когда я это сделал, мои ssh-ключи не были правильно указаны.

Чтобы исправить это, я установил разрешения через chmod для родительского каталога, в котором я хотел разместить свой клон, чтобы я мог писать в него. Затем я запустил git clone БЕЗ префикса sudo. Это тогда сработало! Я изменил разрешения обратно после этого. Выполнено.


1

Я получил эту ошибку, потому что я сгенерировал ключи SSH с неправильным адресом электронной почты. Я смог подключиться с помощью SSH, но не с помощью GIT. Решением было восстановить ключи, используя основной адрес электронной почты моей учетной записи на github.


1

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

Ваш открытый ключ сохраняется в файле id_rsa.pub; и является ключом, который вы загружаете в свою учетную запись. Вы можете сохранить этот ключ в буфер обмена, выполнив это:

pbcopy <~ / .ssh / id_rsa.pub

  • скопируйте ключ SSH в буфер обмена и вернитесь на веб-портал.
  • В поле Ключ SSH вставьте свой ключ SSH.
  • В поле Имя укажите имя для ключа.
  • спасти .


1

Самое простое решение этого, когда вы пытаетесь отправить в хранилище с другим именем пользователя:

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

1

Эта странная ошибка в моем случае была признаком gnome-keyring-daemonнеправильного присвоения имени ключу, к которому требовался пароль.

Я следую за шагами, изложенными здесь, и ввел пароль через терминал. Ошибка, известная как интерфейс GUI, была устранена. Смотрите: /ubuntu/3045/how-to-disable-gnome-keyring


1

В моем случае я переустановил Ubuntu, и имя пользователя изменилось с предыдущего. В этом случае сгенерированный ключ ssh также отличается от предыдущего.

Проблема решена путем простого копирования текущего открытого ключа ssh в хранилище. Ключ будет доступен у вашего пользователя/home/.ssh/id_rsa.pub


1

В моем MAC я решил это с:

cp ~/.ssh/github_rsa ~/.ssh/id_rsa

По какой-то причине мой мерзавец остановился, чтобы найти закрытый ключ в github_rsaфайле. Это произошло в конкретном репо. Я имею в виду, что в других репозиториях git продолжал работать нормально.

Я думаю, что это ошибка.

Я мог бы найти это поведение работает ssh -vT git@github.com

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.