it-swarm.com.ru

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

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

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

git clone [email protected]:cakebook.git

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

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

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

492
teepusink

пользователь ранее не генерировал пару открытых/закрытых ключей 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 [email protected] (не забудьте перезапустить командную строку, чтобы убедиться, что конфигурация перезагружена)

Вот и все, вы должны хорошо клонировать и оформить заказ.

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

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

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

eval $(ssh-agent -s)

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

ssh-add ~/.ssh/id_rsa

599
Rufinus

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

ssh -vT [email protected]

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

175
nottinhill

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

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

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

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


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

138
kavinyao

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

Команда 1:

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

eval "$(ssh-agent -s)"

Команда 2:

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

ssh-add ~/.ssh/id_rsa
85
jarora

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

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

17
Robina Li

Обратите внимание, что (по крайней мере, для некоторых проектов) у вас должна быть учетная запись 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 или просто Google SSH-кейген)

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

Перейдите на: https://github.com/settings/ssh

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

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

17
Mason Bryant

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

ssh-add ~/.ssh/id_rsa
16
Wouter Schoofs

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

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

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

ForwardAgent no 

в 

ForwardAgent yes
12
Richipal

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

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

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

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

Но правда в том, что

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

[email protected]:USERNAME/REPOSITORY.git

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

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

10
William Hu

Я боролся с той же проблемой, что я и сделал, и я смог клонировать репо. Я следовал этой процедуре для 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 "[email protected]"
  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], просто нажмите клавишу ввода еще раз . В приглашении введите безопасную фразу-пароль.
  4. Enter passphrase (empty for no passphrase): [Type a passphrase] нажмите Enter, если вы не хотите Enter same passphrase again: [Type passphrase again] нажмите Enter еще раз

Это сгенерирует 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 Введите название и вставьте ключ из буфер обмена и сохранить его. Вуаля, вы сделали. 
8
Zeeshan Shabbir

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

6
Jason

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

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-кд ~/.ссх

8- ssh-keygen, запрашивает сохранение файла, разрешает

9- cat ~/.ssh/id_rsa.pub [Доступ к вашему открытому ключу и копирование ключа в настройки Gerrit]

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

 enter image description here

 enter image description here

5
vikram jeet singh

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

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

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

5
gMale

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

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

  git Push <Git Remote path> --all
4
Vizllx

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

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

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

4
Andrew

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

3
kashif

В дополнение к ответу Руфинуса, ярлык для копирования вашего ключа ssh в буфер обмена в Windows:

  • type id_rsa.pub | clip

Refs:

3
Jonathan

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

2
Rhey M.

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

ssh-keygen -t rsa -b 4096 -C "[email protected]"

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

2
karthik339

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

chmod -R 700 /home/ec2-user/
1
duhaime

Я получаю похожую ошибку Permission denied (publickey) при попытке запустить make-файл.

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

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

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

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

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

1
WickedW

У меня сработало

ssh -i [your id_rsa path] -T [email protected]
1
Mr陈哲

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

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

1
Sonu

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

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

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

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

Я мог бы найти это поведение при выполнении ssh -vT [email protected]

1
CelinHC

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

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

1
rivanov

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

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

pbcopy <~/.ssh/id_rsa.pub

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

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

1
Charles Brunet

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

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

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

1
BuvinJ

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

 git remote set-url Origin https://[email protected]/USERNAME/PROJECTNAME.git
1
Nizar B.

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

Sudo vi/etc/ssh/sshd_config

1) Комментарий ниже: # Измените no, чтобы отключить туннелированные пароли в виде открытого текста #PasswordAuthentication yes PasswordAuthentication нет ----> прокомментировал это. 

2) Затем перезапустил демон sshd, как показано ниже.

перезапуск службы sshd

0
lambzee

Шаги для Mac:

  1. Переключить пользователя (Sudo su - jenkins)
  2. Генерировать ключ (ssh-keygen -t rsa -b 4096 -C "имя пользователя"). Имя пользователя это тот, который вы используете с Дженкинс.
  3. Скопируйте сгенерированный открытый ключ (cat ~/.ssh/id_rsa.pub).
  4. Вставьте ключ в git аккаунт. (Настройки -> Ключи SSH и CPG -> Новые ключи Ssh -> Введите имя ключа (может быть любым) и вставьте ключ в Description).
0
Abhishek Bais

Прежде всего, я рекомендую проверить некоторые стандартные вещи, такие как:

  • войдите как правильный пользователь в вашей системе,
  • иметь правильный закрытый ключ в нужном месте в вашей системе,
  • попробуйте подключиться с правильным именем пользователя , именем хоста , и портом ,
  • иметь открытый ключ в нужном месте (и для нужного пользователя) на внешнем сервере,
  • перезапустил службу ssh на вашем компьютере:
 service ssh restart 

Этого было достаточно для меня.

0
simhumileco
$ cd ~
$ cd .ssh
$ chmod 400 id_rsa
0
539f

Используйте ссылку ssh от Github, но не добавляйте ее вместе с ssh, просто используйте вкладку ssh на git hub, чтобы клонировать репозиторий.

0
pal4life

Позвольте мне также поделиться своим опытом,

Я пытался клонировать какой-то проект из репозитория Gerrit, где я получил свои открытые ключи в настройках учетной записи.

При первой попытке сделать git clone я получил следующую ошибку:

Unable to negotiate with XX.XX.XX.XX port XXX: no matching key exchange
method found. Their offer: diffie-hellman-group1-sha1

Я понял, что мне нужно каким-то образом передать параметр SSH -oKexAlgorithms=+diffie-hellman-group1-sha1 в git clone.

Надеемся, что переменная окружения GIT_SSH_COMMAND сделала свою работу:

export GIT_SSH_COMMAND="ssh -oKexAlgorithms=+diffie-hellman-group1-sha1"

Но git clone все еще не начал работать .. Теперь он выдает (по теме):

Permission denied (publickey).

Я уже получил ключи SSH и не хотел их восстанавливать. Я проверил простое SSH-соединение с хостом, и все было в порядке:

****    Welcome to Gerrit Code Review    ****

  Hi XXXXX, you have successfully connected over SSH.

  Unfortunately, interactive shells are disabled.
  To clone a hosted Git repository, use:

  git clone ssh://[email protected]:xxx/REPOSITORY_NAME.git

Я был немного смущен. Я начал снова и включил отладку для SSH через опцию -vvv. И я увидел следующее:

debug1: read_passphrase: can't open /dev/tty: No such device or address

Возможно, это было излишним для переменной GIT_SSH_COMMAND env - мой ключ был защищен парольной фразой (и я ввел ее, когда проверял вход в систему на хосте git repo).

Итак, я решил избавиться от этой фразы тогда. Простая команда помогла мне:

ssh-keygen -p

Затем я ввел свой пароль для "старого пароля" и просто нажал ENTER дважды на "новый пароль", чтобы оставить его пустым, т.е. без пароля, и подтвердить свой выбор.

После этого я получил только что клонированный репо на моем локальном диске.

0
rook

Выполните терминал как администратор.

Если терминал не видит ваш файл .ssh, он вернет эту ошибку.

0
Raul Barros