Як вирішити помилку у дозволі (відключеній (publickey)) під час використання Git?


631

Я на 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 та додавання мого ключа s_ згенерованого id_rsa.pub до ключів SSH та GPG виправили проблеми з дозволом на клонування.
Таннер Долбі

Відповіді:


774

Якщо користувач не генерував раніше задану пару відкритого / приватного ключів ssh

Ця інформація працює на theChaw, але може бути застосована до всіх інших сховищ git, які підтримують автентифікацію SSkey pubkey. (Див., Наприклад , гітоліт , гітлаб або гітуб.)

Спочатку почніть з налаштування власного набору відкритих / приватних ключів. Для цього можна використовувати або DSA, або RSA, тому в основному будь-який ключ, який ви налаштуєте, буде працювати. У більшості систем ви можете використовувати ssh-keygen.

  • Спочатку ви захочете записатись у свій .ssh каталог. Відкрийте термінал і запустіть:

    cd ~/.ssh && ssh-keygen

  • Далі вам потрібно скопіювати це у буфер обміну.
    • В ОС 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. У мене те саме було з Ассамблею, і ти посилання допомогло мені вирішити це питання. Дякую !
Олександр Бур'є

Ця відповідь корисна, але ця здається більш повною і такою ж простою, якщо ви створюєте
whitneyland

6
У мене виникла проблема з кейгеном. Він чутливий до адреси електронної пошти у глобальній змінній env. Якщо у вас виникли проблеми, вам потрібно буде вказати адресу електронної пошти для свого облікового запису github на першому кроці: ssh-keygen -t rsa -C "your_email@youremail.com"
melchoir55

30
Якщо це все ще не працює, вам потрібно буде ssh-add ~/.ssh/id_rsa.
Майкл Литвин

1
Копіювання за допомогою xclipLinux працює лише за допомогою 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 у своєму конфігураційному файлі, і він працював.
Jarie Bolander

1
Показано, який ключ github намагався використовувати для автентифікації. v корисно
cdosborn

9
Це нічого не виправляє. Я все ще отримую помилку у питанні ОП.
ІгорГанапольський

5
Команда є, щоб допомогти вам вирішити проблему, це не чарівний виправлення - це для мене перемикач.
stevek

2
Я не можу сказати, що це вирішило що-небудь, але це пекло цікавої команди і працює також з GitHub Enterprise.
Hack-R

164

Ця помилка може статися, коли ви отримуєте доступ до URL-адреси SSH (Read / Write) замість 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.


З https://github.comURL-адресою git все ще йдеться SSL certificate problem: self signed certificate in certificate chain. git -c http.sslVerify=false clone ...здається небезпечним рухом. Хоча Chrome не дає жодних ssl попереджень. Думки?
Джейсон Клебан

1
@ uosɐſ Вибачте, але я ніколи не стикався з цією проблемою. Можливо, перше, що потрібно зробити, це спробувати ту саму команду з іншої машини і подивитися, чи проблема не зникає.
kavinyao

1
Це зробив і для мене. Дякую. Щоб клонувати своє git repo на мій обліковий запис хостингу (1and1), мені довелося скористатися git clone https://github.com/MyUserName/MyRepo.git Просто натисніть на текстові посилання під URL-адресою repo праворуч від сторінки Github, де написано " Ви можете клонуватись за допомогою HTTPS, SSH або Subversion . ". (Клацніть HTTPS, щоб отримати посилання замість SSH за замовчуванням .)
Олівер Шафельд

ДЯКУЮ ТОБІ!!!!!!
Шарль Шериф

Відмінна відповідь. Нарешті хтось пояснює, чому це працює так.
Qback

104

GitHub допомогу посилання допомогла мені розібратися в цій проблемі. Схоже, ключ ssh не доданий до агента ssh. Це те, що я закінчив робити.

Команда 1:

Переконайтесь, що ssh-агент увімкнено. Команда запускає ssh-агент у фоновому режимі:

eval "$(ssh-agent -s)"

Команда 2:

Додайте ключ SSH до агента ssh:

ssh-add ~/.ssh/id_rsa

7
Після оновлення до OSx El Capitan до Сьєрри це працювало для мене.
Louwki

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 або просто google ssh-keygen)

Щоб підтвердити наявність у вас ключа, пов’язаного з вашим обліковим записом 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, якщо ви не хочете знову Enter same passphrase again: [Type passphrase again]натискати клавішу Enter

Це призведе до генерації id_rsa.pub

Крок 3: Додавання вашого SSH ключа до ssh-агента

  1. Проміжний тип eval "$(ssh-agent -s)"
  2. Додайте свій SSH ключ до ssh-агента. Якщо ви використовуєте існуючий ключ 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 з VM VirtualBox. Оновив мій Vagrantfile для використання config.ssh.forward_agent = true, перезапустив VM, і тепер він працює.
Кріс Блум

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".
Thach Van

6

У Windows переконайтесь, що всі ваші додатки узгоджуються на ДОМАШНЄ. 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 ​​ключ працює, але сьогодні деякі налаштування моєї системи змінилися. Я знову додаю ключ shh і він працює зараз.
Хітеш Агарвал

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 [Доступ до відкритого ключа та скопіюйте ключ до налаштувань герріта]

Примітка . Ви не повинні використовувати команду sudo з Git. Якщо у вас є дуже вагома причина, ви повинні використовувати sudo, тоді переконайтеся, що ви використовуєте його з кожною командою (можливо, краще просто використовувати su, щоб отримати оболонку як корінь у цій точці). Якщо ви генеруєте 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) під час спроби запуску makefile.

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

Клацніть Завантажити GitHub для Mac з - https://help.github.com/articles/set-up-git#platform-mac

Після завершення налаштування з обліковим записом git hub (я також встановив інструменти командного рядка git hub, але не впевнений, потрібен цей крок чи ні), я отримав електронний лист -

[GitHub] До вашого облікового запису додано новий відкритий ключ

і моя помилка була виправлена


1

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

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

Щоб виправити це, я встановив дозволи через chmod на батьківському каталозі, я хотів містити свій клон, щоб я міг писати в нього. Тоді я побіг клон git БЕЗ приставки судо. Тоді це спрацювало! Після цього я змінив дозволи. Зроблено.


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

Чомусь мій git зупинився, щоб знайти приватний ключ у github_rsaфайлі. Це сталося в конкретному репо. Я маю на увазі, що в інших сховищах git продовжував працювати нормально.

Я думаю, що це помилка.

Я міг би знайти цю поведінку запущеною ssh -vT git@github.com

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.