Сообщение об ошибке GitHub - Отказано в доступе (publickey)


701

Кто-нибудь видел эту ошибку и знает, что делать?

Я использую терминал, я в корне, репозиторий GitHub существует, и я не знаю, что делать сейчас.

> git push -u origin master
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.


2
Аналогичный вопрос: stackoverflow.com/questions/16074832/…
JMoran

1
Могут быть проблемы с разрешениями .ssh и авторизованными ключами. Ssh довольно строгий, Google это.
К - Токсичность в СО растет.


как и ответ @bdukes, здесь команда, использующая https, и она будет работать, пример Windows: «PS C: \ xampp \ htdocs> git clone github.com/algolia/instant-search-demo.git »
Dung

Ответы:


665

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

Вы также можете использовать HTTPS URL вместо SSH / git URL, чтобы избежать необходимости иметь дело с ключами SSH. Это рекомендуемый метод GitHub .

Кроме того, GitHub имеет страницу справки специально для этого сообщения об ошибке и более подробно объясняет все, что вы могли проверить.


53
Эта ошибка не является исключительной для GitHub. Я получаю ту же ошибку с BitBucket, и я чешу голову, как ее решить ...
IgorGanapolsky

32
Вспомогательная часть используется ssh -vT git@github.comна странице справки Github для отладки того, какой ключ использует ваш репозиторий. Я предлагаю вам добавить это в свой ответ.
МаксимБернард

25
Недостаток использования HTTPS вместо SSL немного разочаровывает. SSH гораздо удобнее. Предложение от @MaximeBernard выше решило проблему для меня: GIT не искал подходящее место для каталога .ssh. Использование ssh -vT git@github.comпредоставляет много информации о том, почему это не работает.
Кристоф

1
согласно моему комментарию выше, третий вариант заключается в том, что команда отправляется с учетной записи, отличной от учетной записи с ключами ssh (например, от имени root).
Дэвид Лебауэр

1
Как упомянуто @ theapache64: Если вы работаете на Mac и уже сгенерировали ssh-ключ, «ssh-add» действительно может быть тем, чего вам не хватает. Работал на меня.
Цифровая непостоянство

78

Вы создали файл конфигурации в вашем каталоге ~ / .ssh? У этого должно быть содержание как это:

Host github.com 
 IdentityFile ~/.ssh/github_rsa

Предполагая, что вы создали ключ ssh с именем github_rsa

и загрузил его на GitHub ...

ПРИМЕЧАНИЕ. Вы должны следовать этому способу явной настройки, если у вас есть более 1 ключа (2 и более) в каталоге ~ / .ssh /. Если вы не укажете ключ таким образом, то первый ключ по порядку берется и используется для аутентификации на github, поэтому он зависит от имени файла ключа.


1
Я сгенерировал ssh-ключ и довольно долго работал без проблем. В один прекрасный день (вероятно, после перезапуска) он перестал работать, тогда как ключ не был поврежден в github и в моей локальной системе. Я добавил «файл конфигурации», указав ключ, сопоставленный с доменом. Подробности предоставлены выше в игор-ганапольском-ответе. Работает отлично!
парасриня

3
Это действительно решает мою проблему! Большое спасибо! Но у меня есть вопрос. Прежде чем использовать ваш метод, ssh -T git@github.comотвечайте правильно, пока git push -u origin masterвыдает ту же ошибку, что и в вопросе. Почему я могу подключиться к нему правильно, но не могу нажать или извлечь из него?
Eden Harder

@EdenHarder Я столкнулся с той же проблемой. Вы нашли ответ на это?
Вредди Бхат

64

Я знаю об этой проблеме. После добавления ключа ssh добавьте ключ ssh в агент ssh (из официальных документов )

ssh-agent -s
ssh-add ~/.ssh/id_rsa

После того, как все работает нормально, git может просмотреть правильную клавишу, прежде чем не смог.


5
Префект! Работал на моем MacOS X.
stillatmylinux

9
Не удалось открыть соединение с вашим агентом аутентификации.
Мона Джалал

попробуйте запустить это: Evalssh-agent -s
Vincent Acent

@MonaJalal использованиеssh-add ~/.ssh/github_rsa
Анирбан Наг 'tintinmj'

Отлично. это работает. Спасибо. Er
Эркам КУЧЕТ

62

Вам необходимо сгенерировать ключ SSH (если у вас его нет) и связать открытый ключ с вашей учетной записью Github. Смотрите документацию Github .


2
Спасибо за это ... Я получил ключ SSH, сгенерированный из GitHub. Какая команда сейчас используется для связи двух в терминале? Спасибо!
webwrks

2
Для этого нет терминальной команды. См. Шаг 4 в документации, на которую я ссылаюсь в своем ответе.
cdhowie

Я клонировал хранилище, используя HTTPS. Нужно ли генерировать ключ SSH в этом случае?
Пабитра Дэш

@PabitraDash Нет. HTTPS не использует ключи SSH.
cdhowie

51

Это случилось со мной. По какой-то причине мое происхождение испортилось без моего понимания:

Проверьте правильность настроек

git remote -v

URL-адрес должен быть примерно таким: ssh: //git@github.com/YourDirectory/YourProject.git; если вы не видите git@github.com, используйте

git remote set-url origin git://github.com/YourDirectory/YourProject.git

чтобы исправить это. Или вы можете использовать приложение github для проверки и установки URL-адреса основного удаленного репозитория на панели настроек вашего конкретного репозитория.


9
Будьте осторожны с URL. Они различаются между https и ssh, и посты на этой странице не дают ясного представления. Каждый проект git имеет файл .git / config в корневом каталоге проекта. Там вы можете установить информацию об удаленном и филиале. Установка удаленного для https: url = github.com/<yourGitUserName>/<yourGitProject>.git В то время как для git + ssh: url = git@github.com: <yourGitUserName> / <yourGitProject> .git Неправильный URL-адрес вызывает Ошибка отказа в доступе с открытым ключом, которая, вероятно, не очень ясна.
ДарКорам

для моего случая в финале просто работает с: git remote set-url origin github.com/your_directory/your_project.git
rld

19

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

$git config --get remote.origin.url

Если вы получили результат в следующем формате git@github.com: xxx / xxx.github.com.git, то вам следует сделать следующее.

Сгенерируйте ключ SSH (или используйте существующий). если он у вас есть, вам просто нужно добавить свой ключ в ssh-agent (шаг 2) и в свою учетную запись GitHub (шаг 3).

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

Шаг 1 Генерация пары открытых / закрытых ключей RSA.

$ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

Вам будет предложено подтвердить, где сохранить ключ SSH и какую фразу-пароль вы хотите использовать.

Шаг 2 Добавьте ваш ключ в ssh-agent

  • Убедитесь, что ssh-agent включен

    $eval "$(ssh-agent -s)"

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

    $ssh-add ~/.ssh/id_rsa

Шаг 3 Добавьте свой SSH-ключ к своей учетной записи

$sudo apt-get install xclip

$xclip -sel clip < ~/.ssh/id_rsa.pub

Затем добавьте скопированный ключ в GitHub

Зайдите в Настройки -> Ключи SSH (боковая панель личных настроек) -> Добавить ключ SSH -> заполните форму (ключ находится в вашем буфере обмена, просто используйте ctrl + v) -> Добавить ключ

После выполнения вышеуказанных шагов вы должны решить проблему с разрешениями.

Ссылка Ссылка: Генерация ключей SSH .


Это решение работает на Ubuntu, $ SSH-надстройку /root/.ssh/id_rsa
Feras

Это решило и странную путаницу в моей среде, я бы предложил одну из модификаций, чтобы избежать зависимости от xclip, просто используйтеcat ~/.ssh/id_rsa.pub
Pogrindis

19

Сначала нам нужно проверить наличие ключей ssh ​​на вашем компьютере. Откройте Терминал и запустите:

ls -al ~/.ssh

#or

cd ~/.ssh
ls

и это будет список файлов в вашем каталоге .ssh

И наконец, в зависимости от того, что вы видите (в моем случае было):

 github_rsa  github_rsa.pub known_hosts

Просто попробуйте настроить RSA и, надеюсь, это решит ваши проблемы с git push origin

$ ssh-keygen -lf ~/.ssh/github_rsa.pub

ПРИМЕЧАНИЕ. Сертификаты RSA спарены с ключами, поэтому у вас будет частный и общедоступный сертификат, частный не будет доступен для вас, поскольку он принадлежит github (в данном случае), но общедоступный - тот, который может отсутствовать при возникновении этой ошибки (по крайней мере, так было в моем случае, моя учетная запись или репозиторий на github как-то испортилась, и мне пришлось «связать» открытый ключ, сгенерированный ранее)


Нужно ли копировать SHAвывод в github из этой команды?
Игорь Ганапольский

Нет, просто выполните «ssh-keygen -lf ~ / .ssh / <YOUR_GITHUB_RSA_FILE.pub>»
d1jhoni1b

Вот почему я также приложил команду, которая «Перечисляет файлы в вашем каталоге .ssh» ... чтобы вы знали, из какого файла извлечь ваш ключ (ssh-keygen). Помните, что сертификаты RSA спарены с ключами, поэтому у вас будет частный и общедоступный сертификат, частный не будет доступен для вас, поскольку он принадлежит github (в данном случае), но общедоступный - это тот, который может отсутствовать при возникновении этой ошибки ( по крайней мере, так было в моем случае, моя учетная запись или репозиторий на github как-то испортились, и мне пришлось снова «связать» открытый ключ, ранее сгенерированный)
d1jhoni1b

$ ssh-keygen -lf ~ / .ssh / github_rsa.pub /home/mona/.ssh/github_rsa.pub: Нет такого файла или каталога
Мона Джалал,

«Нет такого файла или каталога» означает, что у вас нет этого имени файла или пути ... что вы получите, когда выполните ls -al ~ / .ssh?
d1jhoni1b

14

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

Сначала я подумал, что «Обновление до macOS Sierra сломает ваши SSH-ключи и заблокирует вас на ваших собственных серверах»

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

ssh-add -K

И введите кодовую фразу ... готово!


2
тот же вопрос, который работал для меня: `ssh-add -K ~ / .ssh / id_rsa`
mvladk

11

Другое решение:

создайте ключи SSH, введите ssh-keygen -t rsa -C "your_email@example.com" . Это создаст файлы id_rsa и id_rsa.pub.

Добавьте id_rsa в список ssh на локальном компьютере: ssh-add ~/.ssh/id_rsa.

После генерации ключей получите pubkey, используя:

cat ~/.ssh/id_rsa.pub 

вы получите что-то вроде:

cat ~/.ssh/id_rsa.pub 

ssh-rsa AAAB3NzaC1yc2EAAAADAQABAAACAQCvMzmFEUPvaA1AFEBH6zGIF3N6pVE2SJv9V1MHgEwk4C7xovdk7Lr4LDoqEcqxgeJftwWQWWVrWWf7q9qCdHTAanH2Q5vx5nZjLB+B7saksehVOPWDR/MOSpVcr5bwIjf8dc8u5S8h24uBlguGkX+4lFJ+zwhiuwJlhykMvs5py1gD2hy+hvOs1Y17JPWhVVesGV3tlmtbfVolEiv9KShgkk3Hq56fyl+QmPzX1jya4TIC3k55FTzwRWBd+IpblbrGlrIBS6hvpHQpgUs47nSHLEHTn0Xmn6Q== user@email.com

скопируйте этот ключ (значение) и перейдите на github.com и в настройках (ключ ssh и pgp) добавьте свой открытый ключ.


10

Если вы не обращаетесь к своему собственному репозиторию или не выполняете клонирование внутри клонированного репозитория (используя некоторые команды «git submodule ...»):

В домашнем каталоге вашего хранилища:

$ ls -a

1. Откройте «.gitmodules», и вы найдете что-то вроде этого:

[submodule "XXX"]
    path = XXX
    url = git@github.com:YYY/XXX.git

Измените последнюю строку на HTTPS хранилища, которое вам нужно извлечь:

[submodule "XXX"]
    path = XXX
    https://github.com/YYY/XXX.git

Сохраните «.gitmodules» и запустите команду для подмодулей, и «.git» будет обновлен.

2. Откройте «.git», перейдите в «config» файл, и вы найдете что-то вроде этого:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "origin"]
    url = https://github.com/YYY/XXX.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[submodule "XXX"]
    url = git@github.com:YYY/XXX.git

Измените последнюю строку на HTTPS хранилища, которое вам нужно извлечь:

    url = https://github.com/YYY/XXX.git

Таким образом, в этом случае основная проблема заключается просто в URL. HTTPS любого репозитория теперь можно найти в верхней части страницы репозитория.


9

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

1- удалить все источники

git remote rm origin  

(см. https://www.kernel.org/pub/software/scm/git/docs/git-remote.html. ).

* remote: «Управление набором репозиториев (« удаленных »), чьи ветви вы отслеживаете.

* rm: «Удалить имя удаленного. Все ветви удаленного отслеживания и параметры конфигурации для удаленного удаляются.»

2- проверить все было удалено:

git remote -v  

3 - добавить новый мастер происхождения

git remote add origin git@github.com:YOUR-GIT/YOUR-REPO.git

это все люди!


1
Это было полезно. По этим командам он начинает спрашивать у меня имя пользователя github и пароль учетной записи, после этого я могу легко перейти на ссылку github, набрав в терминале: git push -u origin master
Noha Salah

8

Убедись ssh-add -l отображается отпечаток ключа SSH, который присутствует в списке ключей SSH в вашей учетной записи Github.

Если выходные данные пустые, но вы знаете, что у вас есть закрытый ключ SSH, который работает с вашей учетной записью Github, запустите ssh-addэтот ключ (находится в ~/.ssh. Он назван id_rsaпо умолчанию, так что вы, вероятно, запустите ssh-add id_rsa).

Иначе, следуйте этим инструкциям, чтобы сгенерировать пару ключей SSH.


8

Я использовал GitHub ранее для одного из моих проектов PHP. При использовании github я использовал ssh вместо https. Я настроил свою машину таким образом, и каждый раз, когда коммит и нажимал код, он спрашивал мой пароль к ключу rsa.

Через несколько дней я перестал работать над проектом php и забыл свой пароль rsa. Недавно я начал работать над проектом Java и перешел на bitbucket. Поскольку я забыл пароль и восстановить его невозможно, я думаю, я решил использовать протокол https (рекомендуемый) для нового проекта и получил ту же ошибку, о которой говорилось в вопросе.

Как я это решил?

  1. Запустил эту команду, чтобы сказать моему git использовать https вместо ssh:

    git config --global url."https://".insteadOf git://
    
  2. Удалить любой пульт, если есть

    git remote rm origin
    
  3. Переделайте все от git init до git push и все работает!

PS: Я также деинсталлировал ssh со своего компьютера во время процесса отладки, думая, что его удаление решит проблему. Да, я знаю!! :)


Я не думаю, что это хорошая идея - указывать людям на https, когда также должен работать ssh. Кроме того, это вряд ли сработает для людей за корпоративным прокси.
Игорь Стоппа

8

Проблема решена, если вы измените доступ SSH к https доступ к удаленному хранилищу:

git remote set-url origin https_link_to_repository

git push -u origin master

5

Я думаю, что у меня есть лучший ответ для вас, ваши git-приложения читают ваш id_rsa.pub в корневом пользовательском каталоге

/home/root/.ssh/id_rsa.pub

Вот почему ваш ключ в /home/your_username/.ssh/id_rsa.pub не может быть прочитан git. Так что вам нужно создать ключ в /home/root/.ssh/

$ sudo su
$ ssh-keygen
$ cd ~/.ssh
$ cat id_rsa.pub

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


Это позволило мне найти ответ, который я искал. Я запускал клон с sudo по привычке, поэтому искал неверные учетные данные. Снял sudo и мой клон побежал нормально.
Taekahn

4

Если вы уже создали ключ SSH и по-прежнему получаете сообщение об ошибке, это связано с тем, что вам нужно дать пользователю разрешения на чтение и запись в папку, в которую вы клонируете. Для этого sudo chmod 777 <your_folder_name_here>". Конечно, это после того, как вы сгенерировали ключ SSH и все еще получаете эту ошибку. Надеюсь, это поможет будущим пользователям.

редактировать

Чтобы добавить это, используйте admin в Windows, если вы используете git bash


Эта. Это также может вызвать проблему.
KevinO

1
Это была моя проблема, но я не рекомендовал бы устанавливать 777 разрешений для папки. В моем случае папка принадлежала пользователю root, и мне нужно было предоставить ей доступ к моей учетной записи, не являющейся пользователем root. Я сделал это так:sudo chown -R $USER:$USER <your_folder_name_here>
Дэвид

@ Давид, я тоже это рекомендую. 777 довольно хакерский и небезопасный.
Кевин

3

У меня недавно была такая же проблема. Это может помочь, если вам нужно немедленно исправить, но это нужно делать каждый раз, когда вы перезапускаете систему

Из терминала запустите: ssh-add ~/.ssh/id_rsa

Введите системный пароль, и это должно работать.


3

Я хотел бы добавить некоторые из моих выводов:

Если вы используете GitBash, то убедитесь, что ключ SSH хранится в~/.ssh/id_rsa .

По умолчанию GitBashищет ~/.ssh/id_rsaпуть по умолчанию для ключа SSH.

Даже имя файла id_rsaимеет значение. Если вы сохраните свой SSH-ключ в другом имени файла или пути, он выдаст Permission Denied(publickey)ошибку.


3

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

  • убедитесь, что у вас есть ключи, по умолчанию другая папка ~ / .ssh /, т.е. id.rsa и id.rsa.pub

  • Убедитесь, что ключи имеют правильные разрешения, вы можете запустить chmod:

    chmod 600 ~ / .ssh / id_rsa

    chmod 644 ~ / .ssh / id_rsa.pub

  • убедитесь, что содержимое вашего открытого ключа (id_rsa.pub) совпадает с тем, которое загружено в конфигурацию удаленного репозитория

  • Наконец исправьте проблемы с агентом ssh : ssh-add

Немного больше информации: https://itcodehub.blogspot.com/2015/01/ssh-add-problems-with-ssh-agent-and.html


Я скопировал свой ключ ssh с одного компьютера на другой, используя USB-накопитель в формате FAT32. Это изменило права доступа к файлам. В Ubuntu я привык автоматически запрашивать пароль SSH, когда это необходимо, но этого просто не происходило, пока я не побежал, chmodкак вы описали. Спасибо.
Лиделл

1

Если вы используете GitHub для Mac, проверьте настройки, чтобы убедиться, что вы вошли в систему.


1

Я получал ту же ошибку во время «git push». В клиентской части у меня было два происхождения и мастер. Я удалил один, затем он работал нормально.


1

Вы можете использовать URL Https для входа

Я предполагаю, что вы пытаетесь войти в систему с помощью ssh url, когда вы говорите, что git push запрашивает только пароль, учитывая, что вы подключаетесь через ssh.better, вы используете http url.


1

Также в Ubuntu, хотя в настройках BitBucket уже был введен ключ SSH, я получил эту проблему. Причина была в том, что я пытался сделать следующее:

sudo git push origin master

Не уверен, почему, но это было решено с помощью

git push origin master

Судо не используется.


1

Для меня я попробовал это -

eval "$(ssh-agent -s)"

тогда я бегу

ssh-add ~/.ssh/path-to-the-keyfile

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

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

это сгенерирует пару ключей (открытый и закрытый).

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

Я надеюсь, что это поможет другим :)


1

У меня была похожая проблема с @Batman. Однако, поскольку я выполнял это в / usr / local / src / projectname, запуск без sudo не был вариантом.

Просто добавьте флаг -E, чтобы сохранить среду (ваш ~ / .ssh / путь).

$ sudo -E git clone git@your_repo

От человека Судо:

-E, --preserve-env Указывает политике безопасности, что пользователь желает сохранить существующие переменные среды. Политика безопасности может возвращать ошибку, если у пользователя нет разрешения на сохранение среды.


1

Один из сценариев, когда это произойдет, - это когда вы будете следовать инструкциям GitHub после создания своего репозитория. Git проинструктирует вас, чтобы добавить ваш пульт с чем-то вроде этого.

git remote add origin git@github.com:<user>/<project>.git

Замените то, что в <>, значениями, относящимися к вашей учетной записи.

Решение состоит в том, чтобы удалить .gitсуффикс. Добавьте пульт следующим образом:

git remote add origin git@github.com:<user>/<project>


1

ТЛ; др

на ~/.ssh/configместе

PubkeyAcceptedKeyTypes=+ssh-dss

Сценарий Если вы используете версию openSSH> 7, как, скажем, на сенсорной панели MacBook Pro, этоssh -V
OpenSSH_7.4p1, LibreSSL 2.5.0

У вас также был старый Mac, на котором изначально вы поместили ключ на Github, возможно, он использует ключ id_dsa. OpenSSH v7 по умолчанию не включает использование этих ключей DSA (которые включают это ssh-dss), но вы все равно можете добавить его обратно, вставив следующий код в ваш~/.ssh/config

PubkeyAcceptedKeyTypes=+ssh-dss

Источник, который работал для меня, это бюллетень Gentoo

Теперь вы можете по крайней мере использовать GitHub, а затем зафиксировать свои ключи в RSA.


1

Я нашел эту страницу при поиске решения аналогичного сообщения об ошибке git pullна удаленном хосте:

$ git pull
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Я был подключен с моей локальной машины к удаленному хосту через ssh -AY remote_hostname. Это не решение вопроса OP, но полезно для других, кто сталкивался с этой страницей, поэтому разместите ее здесь.

Обратите внимание, что в моем случае он git pullотлично работает на моем локальном компьютере (то есть ключ ssh был настроен, добавлен в учетную запись GitHub и т. Д.). Я решил свою проблему, добавив это ~/.ssh/configна моем ноутбуке:

Host *
     ForwardAgent yes

Затем я снова подключился к удаленному хосту ssh -AY remote_hostnameи git pullтеперь работал. Изменение в конфигурации позволяет пересылать мою пару ключей ssh ​​с моего локального компьютера на любой хост. -AВариант sshфактически передает его в том , что SSH сессии. Подробнее смотрите здесь.


0

Может быть, ваш ssh-агент не включен Вы можете попробовать

  1. Скачать Git

http://git-scm.com/

  1. Установить его

  2. Включить ssh-agent

C: \ Program Files \ Git \ cmd

запуск SSH-агент


0

Перейдите на панель управления учетной записью GitHub, найдите репозиторий проекта, нажмите вкладку « Настройки » - в разделе « Развертывание ключей» вам нужно будет добавить свой ключ SSH. Откройте терминал и введите:

cat ~/.ssh/id_rsa.pub | pbcopy 

Это скопирует ключ из вашего файла id_rsa.pub. Так что просто вернитесь на панель инструментов GitHub, вставьте ее, нажмите Add Key и все.

То же решение применяется к учетным записям Bitbucket.

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