Неможливо перейти до сховища Git у Bitbucket


143

Я створив нове сховище і зіткнувся з дивною помилкою. Раніше я використовував Git на Bitbucket, але я просто переформатувався, і тепер я не можу змусити Git працювати. Після виконання зобов’язань мені довелося додати свою електронну пошту та ім’я до глобальних, але потім це було зроблено просто чудово.

Коли я намагаюся використовувати команду

git push origin master

це не працює. Я отримую це повідомлення:

$ git push 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.

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


4
ви можете використовувати https замість gits у віддаленій URL-адресі. наприклад: yourusername@bitbucket.org/teamname/repository.git
Алі

1
Я вирішив ту саму проблему, уважно дотримуючись підручника Atlassian щодо налаштування SSH на вашій машині: confluence.atlassian.com/display/BITBUCKET/Set+up+SSH+for+Git
sws

Аналогічне питання: stackoverflow.com/questions/12940626 / ...
JMoran

Відповіді:


229

Написання цього для тих, хто тільки починає працювати з Git та BitBucket в Windows, і які не так знайомі з Bash (оскільки це є загальною проблемою і високим рейтингом результатів Google при пошуку повідомлення про помилку в питанні).

Для тих, хто не проти HTTPS і хто шукає швидкого виправлення, прокрутіть донизу цю відповідь, щоб отримати інструкції в розділі ЗА ЛЕГИЙ

Для тих, хто хоче вирішити актуальну проблему, дотримуйтесь інструкцій нижче:

Виправлення проблеми SSH якомога швидше

Це набір інструкцій, отриманих із URL-адреси, на яку посилається VonC. Він був модифікований таким чином, щоб бути максимально стійким і стислим.

  • Не вводьте $або будь-які рядки, які не починаються з $( $значить, це те, що ви вводите в GitBash).

  • Відкрийте GitBash

Встановіть свою глобальну інформацію, якщо ви ще цього не зробили:

$ git config --global user.name "Your Name"
$ git config --global user.email "you@example.com"

Перевірте на OpenSSH:

$ ssh -v localhost
OpenSSH_4.6p1, OpenSSL...

Бачите щось подібне?

  • Так: Продовжуйте.
  • Ні: Перейдіть до розділу ЗА ЛЕГИЙ або перейдіть до пов'язаної статті від VonC.

Перевірте, чи вже ви створили ключі:

$ ls -a ~/.ssh/id_*

Якщо є два файли, ви можете пропустити наступний крок.

$ ssh-keygen

Залиште все як за замовчуванням, введіть пароль. Тепер ви повинні побачити результати за допомогою цієї команди:

$ ls -a ~/.ssh/id_*

Перевірте наявний конфігураційний файл:

$ ls -a ~/.ssh/config

Якщо ви отримаєте результат, перевірте цей файл на помилкову інформацію. Якщо жодного файлу не існує, виконайте наступне:

$ echo "Host bitbucket.org" >> ~/.ssh/config
$ echo " IdentityFile ~/.ssh/id_rsa" >> ~/.ssh/config

Підтвердьте вміст:

$ cat ~/.ssh/config

Host bitbucket.org
 IdentityFile ~/.ssh/id_rsa
  • Перед "IdentityFile" обов'язкове пробіл.

Перевірте, чи запускаєте SSH-агент щоразу, коли ви запускаєте GitBash:

$ cat ~/.bashrc
  • Якщо ви бачите функцію, яку називають start_agent, цей крок вже завершено.
  • Якщо жодного файлу немає, продовжуйте.
  • Якщо є файл, який не містить цієї функції, ви потрапили в клейку ситуацію. Це, мабуть, безпечно додати до нього (використовуючи наведені нижче інструкції), але це може бути не так! Якщо ви не впевнені, зробіть резервну копію .bashrc, перш ніж дотримуватися інструкцій нижче, або перейдіть до розділу ДЛЯ ЛАЗНИХ .

Введіть наступне в GitBash, щоб створити свій .bashrc файл:

$ echo "SSH_ENV=$HOME/.ssh/environment" >> ~/.bashrc
$ echo "" >> ~/.bashrc
$ echo "# start the ssh-agent" >> ~/.bashrc
$ echo "function start_agent {" >> ~/.bashrc
$ echo "    echo \"Initializing new SSH agent...\"" >> ~/.bashrc
$ echo "    # spawn ssh-agent" >> ~/.bashrc
$ echo "    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > \"\${SSH_ENV}\"" >> ~/.bashrc
$ echo "    echo succeeded" >> ~/.bashrc
$ echo "    chmod 600 \"\${SSH_ENV}\"" >> ~/.bashrc
$ echo "    . \"\${SSH_ENV}\" > /dev/null" >> ~/.bashrc
$ echo "    /usr/bin/ssh-add" >> ~/.bashrc
$ echo "}" >> ~/.bashrc
$ echo "" >> ~/.bashrc
$ echo "if [ -f \"\${SSH_ENV}\" ]; then" >> ~/.bashrc
$ echo "     . \"\${SSH_ENV}\" > /dev/null" >> ~/.bashrc
$ echo "     ps -ef | grep \${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {" >> ~/.bashrc
$ echo "        start_agent;" >> ~/.bashrc
$ echo "    }" >> ~/.bashrc
$ echo "else" >> ~/.bashrc
$ echo "    start_agent;" >> ~/.bashrc
$ echo "fi" >> ~/.bashrc

Переконайтеся, що файл створено успішно (ваш має відрізнятися лише там, де відображається "yourusername"):

$ cat ~/.bashrc
SSH_ENV=/c/Users/yourusername/.ssh/environment

# start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."
    # spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}

if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi
  • Закрийте GitBash та відкрийте його знову.
  • Вам слід попросити свою парольну фразу (для файлу SSH, який ви створили раніше).
  • Якщо немає запиту, ви або не встановили парольну фразу, або GitBash не запускає скрипт .bashrc (що було б дивним, тому розгляньте зміст цього вмісту!). Якщо ви запускаєте це на Mac (OS X), .bashrcне виконується за замовчуванням - .bash_profileє. Щоб виправити це, покладіть цей фрагмент у своє .bash_profile:[[ -s ~/.bashrc ]] && source ~/.bashrc

Якби ви не ввели пароль, ви б побачили щось подібне під час запуску GitBash:

Initializing new SSH agent...
succeeded
Identity added: /c/Users/yourusername/.ssh/id_rsa (/c/Users/yourusername/.ssh/id_rsa)

І наступні результати повинні повернути:

$ ssh-add -l

Однак якщо ви отримаєте наступне ssh-add -l:

Could not open a connection to your authentication agent.

Він не породив агент SSH, і причиною цього може стати ваш .bashrc.

Якщо при запуску GitBash ви бачите це:

Initializing new SSH agent...
sh.exe": : No such file or directory

Це означає, що ви забули уникнути $ з символом \ під час відлуння до файлу (тобто змінні були розширені). Створіть .bashrc, щоб вирішити це.

Перевірте, чи працює агент, і ваші ключі були додані:

$ ssh-add -l

Слід повернути щось подібне до цього:

2048 0f:37:21:af:1b:31:d5:cd:65:58:b2:68:4a:ba:a2:46 /Users/yourusername/.ssh/id_rsa (RSA)

Для отримання відкритого ключа виконайте таку команду:

$ cat ~/.ssh/id_rsa.pub

(він повинен повернути щось, починаючи з "ssh-rsa ......"

  • Клацніть піктограму вікна GitBash
  • Натисніть Редагувати
  • Клацніть Позначити
  • Виділіть відкритий ключ за допомогою миші (включаючи провідний ssh-rsaбіт і слід == youremail@yourdomain.comбіт)
  • Клацніть правою кнопкою миші вікно (виконує копію)
  • Вставте свій відкритий ключ у Блокнот.
  • Видаліть всі нові рядки таким чином, що це лише один рядок.
  • Натисніть CTRL+Aпотім , CTRL+Cщоб скопіювати відкритий ключ знову в буфер обміну.

Налаштуйте свій приватний ключ за допомогою BitBucket, виконавши наступні дії:

  • Відкрийте веб-переглядач та перейдіть на сайт BitBucket.org
  • Увійдіть на BitBucket.org
  • Клацніть свій аватар (праворуч угорі)
  • Клацніть Керувати обліковим записом
  • Клацніть клавіші SSH (у розділі Безпека в лівому меню)
  • Клацніть Додати ключ
  • Введіть Global Public Keyдля мітки
  • Вставте відкритий ключ, який ви скопіювали з Блокнота

Global Public KeyТепер вхід повинен бути видно в списку ключів.

  • Повернення до GitBash
  • CD в ​​каталог, що містить ваш проект
  • Змініть своє походження на зміну SSH (це не буде, якщо ви виконали кроки ДЛЯ ЛАЗНИХ )

Перевірте свої пульти:

$ git remote -v

Перехід до URL-адреси SSH:

$ git remote set-url origin git@bitbucket.org:youraccount/yourproject.git

Перевірте, чи все в робочому порядку:

$ git remote show origin

Ви повинні побачити щось подібне:

Warning: Permanently added the RSA host key for IP address '...' to the list of known hosts.
* remote origin
  Fetch URL: git@bitbucket.org:youruser/yourproject.git
  Push  URL: git@bitbucket.org:youruser/yourproject.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local ref configured for 'git push':
    master pushes to master (fast-forwardable)

Зроблено!

Ви можете вибрати HTTPS замість SSH. Він вимагатиме від вас ввести пароль під час віддалених операцій (він кешований тимчасово після введення одного разу). Ось як можна налаштувати HTTPS:

ДЛЯ ЛАЗІВ

Ви повинні виправити проблему з SSH, як описано у VonC; однак, якщо ви поспішаєте виконувати зобов'язання та не маєте інструментів / часу / знань, щоб створити новий відкритий ключ зараз , встановіть своє походження на альтернативу HTTPS:

> https://accountname@bitbucket.org/accountname/reponame.git

Використання інструмента GUI, наприклад TortoiseGit або інструментів командного рядка .

Ось документація цієї альтернативної вихідної URL-адреси.

Командний рядок для додавання джерела, якщо такого не існує:

git remote add origin https://accountname@bitbucket.org/accountname/reponame.git

Командний рядок для зміни наявного походження:

git remote set-url origin https://accountname@bitbucket.org/accountname/reponame.git

ПРИМІТКА. Ім'я вашого облікового запису - це не ваша електронна адреса.

Ви також можете встановити свою глобальну інформацію:

git config --global user.name "Your Name"
git config --global user.email "you@example.com"

Потім спробуйте натиснути ще раз (не потрібно робити знову)

git push origin master

echo "Хост bitbucket.org" >> ~ / .ssh.config, не повинно так тривати "." бути '/'?
Петро

1
Інколи трапляється, що ви додали все, що було сказано вище, ~/.bashrcале все ж, коли ви запускаєте команду, ssh-all -lвоно все одно показує. No agent У такому випадку спробуйте цю команду, ssh-agent /bin/bashі це будеInitializing new SSH agent...
shinesecret

5
Одна з найкращих відповідей, з якими я коли-небудь стикався на StackOverflow
Sambhav Sharma

1
@JGallardo - Добре запитання! Гарна новина - ні. Це змінні сценарії bash shell - вони схожі на змінні середовища в пакетних файлах.
Graeme Wicksted

1
Те, що це не прийнята відповідь, болить моє серце. Чудова запис!
ruby_newbie

58

Ця помилка також виникає, якщо ви забули додати приватний ключ до ssh-agent. Зробіть це за допомогою:

ssh-add ~/.ssh/id_rsa

4
Це була відповідь у моєму випадку - те, про що я завжди забуваю, коли створюю новий ключ.
америткара

1
Саме це допомогло після проходження посади вище
Тоні Меррітт

це працювало для мене :), але вам потрібно переконатися, що у вас уже є приватний ключ ssh у вашому локальному каталозі та відкритий ключ, зареєстрований у вашому обліковому записі bitbucket
Daniel

25

Переформатоване означає, що ви, ймовірно, видалили свої публічні та приватні ключі ssh (у ~ / .ssh).

Вам потрібно відновити їх і опублікувати ваш відкритий ключ ssh у вашому профілі BitBucket, як це зафіксовано у « Використовувати протокол SSH з Bitbucket », слідуючи « Налаштувати SSH для Git за допомогою GitBash ».

Облікові записи-> Керування обліковими записами-> Ключі SSH:

http://solvedproblems.hydex11.net/_media/solved-problems/crazy-problems/bitbucket_manage_account.png

Тоді:

http://solvedproblems.hydex11.net/_media/solved-problems/crazy-problems/bitbucket_add_ssh.png

Зображення з " Інтеграція Mercurial / BitBucket з програмним забезпеченням JetBrains "


7
Просто до цього додати трохи. Переконайтесь, що ви використовуєте BitBucket (як показано на скріншоті), що ви додаєте ключ SSH до ключів SSH вашого облікового запису (Accounts-> Manage Account-> SSH Keyys). Додавання його як ключ розгортання через налаштування репозиторію дозволить використовувати цей ключ лише для операцій лише для читання (без фіксації).
welshk91

@ welshk91 Я згоден. Я змінив відповідь, щоб додати більш детальні фотографії.
VonC

1
@VonC - дякую за повідомлення про це. Я марно намагався змусити це працювати на машині Windows, і це, нарешті, зробило трюк. Дякую, Бен
ben18785

21

Я вирішив це, видаливши пульт за допомогою команди:

git remote remove origin

а потім спробував додати віддалений за допомогою URL https замість ssh

git remote add origin httpsUrl

Він запитує облікові дані github. Введіть облікові дані та спробуйте натиснути на git, використовуючи:

git push origin master

1
це мені допомогло. це правильна відповідь у моєму випадку. дякую
binsnoel

Це працює для мене. Я не видалив походження, я просто додав новий
shintaroid

Дякую за пряму відповідь. Працював як шарм - це саме те, що я шукав.
Олександра

4

У мене була така ж проблема. Мої SSH ключі були встановлені правильно. Я вирішив цю проблему так.

Після створення нового проекту в Bitbucket використовуйте клон. Введіть команду клонування в термінал, і вона повинна клонувати порожній проект на ваш комп'ютер. Після цього ви можете скопіювати свої файли в цей каталог і почати виконувати і наштовхувати на бітбукет.


1
Як дивно. У мене є та сама проблема, що і в ОП сьогодні, але без перевстановлення чи зміни систем, мої ключі були в порядку. Сьогодні git remote addпроцес просто не працював - я отримав помилку аутентифікації під час спроби натиснути - але видалення .git, а потім використання git clone& повторне копіювання мого джерела (лише README.md) замість цього працює чудово. Дякую, Рафаель - я, звичайно, не думав би спробувати це, якби не ваша відповідь.
kris

рада, що це рішення допомогло вам
Рафаель,

1
Дякую за вашу відповідь. Мені вдалося виправити проблему, просто створивши новий каталог та клонувавшись у цьому новому режимі. mkdir /tmp/JUNK; cd /tmp/JUNK; git clone ...; cd ..; rm -rf JUNK
Червоний крикет


2

Два невеликих роз’яснення, які можуть врятувати когось плутанину, через яку я пройшов:

1 - URL-адреси підключення відрізняються для HTTPS та SSH

Під час підключення через https ви використовуєте

https://your_account_name@bitbucket.org/owner-account/repo-name.git

однак при підключенні через SSH ім'я облікового запису завжди "git"

ssh://git@bitbucket.org/owner-account/repo-name.git

Спроба підключитися до SSH з іменем вашого облікового запису навпроти призведе до помилки в отриманому оригіналі плаката. Ось як ви можете зробити тест підключення до git @, а потім помилково спробувати своє ім’я користувача та побачити помилку.

2 - Ключі SSH через облікові записи команд будуть застаріли у 2017 році

Якщо ви налаштовуєте ключі SSH на облікові записи команд, вони рекомендують переключити їх на особисті облікові записи. Корисна порада, щоб уникнути е


1

Якщо ви використовуєте SourceTree (я використовую 2.4.1), я знайшов простіший спосіб створити ключ SSH та додати його до моїх налаштувань Bitbucket. Це вирішило для мене проблему.

  1. У SourceTree перейдіть до Налаштування.
  2. Перейдіть на вкладку "Облікові записи" та виберіть свій рахунок.
  3. Повинна бути можливість генерувати та копіювати ключ SSH у буфер обміну.
  4. Після того як ви це скопіювали, перейдіть до Bitbucket у своєму браузері. Перейдіть до [avatar] -> Параметри Bitbucket.
  5. Перейдіть до ключів SSH.
  6. Натисніть кнопку Додати
  7. Вставте ключ, який ви скопіювали.

Мені надійшло повідомлення про підтвердження від Bitbucket, що ключ SSH був доданий до мого облікового запису.

Для довідки, на macOS, використовуючи термінал, ви можете скористатися наступною командою, щоб переглянути клавіші, створені для вашого пристрою. Тут зберігається створений вами ключ.

ls -la ~/.ssh

Як уже заявили інші, ця документація мені допомогла: Використовуйте протокол SSH з хмарою Bitbucket


1

Зробіть ssh як у підручнику з атласу та переконайтеся, що приватний ключ вставляється у профіль, а не у сховище :)


Чи можете ви включити посилання на заявлене Atlassian tutorial? Які кроки потрібно вставити ключ у профіль і як мені знати, чи він вставлений у сховище?
EmmanuelB

Вона тут. Виберіть найкращий вибір для вашої комбінації випадків! confluence.atlassian.com/bitbucket/…
Гектор

0

Я отримав цю саму помилку для одного сховища - раптом, всі інші були і все ще працюють добре, коли я намагаюся натиснути коміти. Виникла проблема з ключем SSH (як ви вже знаєте з попередніх коментарів) - у бітбукеті перейдіть View Profileта натиснітьManage Account .

Ліворуч натисніть на SSH Keys потім додайте той, який у вашій системі знаходиться під каталогом ~ / .ssh /.

Якщо у вас ще не створено жодного з них, скористайтеся інструкціями з одного з дописів, але переконайтеся, що ви використовуєте файл id_dsa.pub за замовчуванням або спеціальний ім'я, щоб пізніше вимагати -iопції зі шляху до ключа, коли ви підключити тобто

ssh -i ~/.ssh/customkeyname username@ip_address

Як тільки ви додасте свій локальний ключ до свого облікового запису в bitbucket, ви зможете розпочати взаємодію зі своїм сховищем.


0

Я знайшов рішення, яке найкраще спрацювало для мене, - це розбити поштовх на менші шматки.

та видалення великих файлів зображень із скріншоту (10 Мб) із комітів

Зрештою, безпека не була проблемою, більше про обмеження файлів бінь


Ви отримуєте помилку вище, зазначену в ОП, і це не проблема авторства / безпеки? Це був розмір вашого зобов'язання?
JohnZaj

Так і сталося
Гаррі Бош

0

Ця помилка також з’являється, коли сховище не існує. Я спробував усі відповіді, поки не побачив, що в назві репо не було тире


0

Для помилок:

[помилка] доступ до сховища відхилено. доступ через ключ розгортання доступний лише для читання. fatal: Не вдалося прочитати з віддаленого сховища. Переконайтеся, що у вас є правильні права доступу та сховище існує.

[помилка] фатальна: Не вдалося прочитати з віддаленого сховища.

[помилка] фатальна: Неможливо знайти віддаленого помічника для "https"

Я вирішив, виконуючи такі кроки:

Спочатку встановіть ці залежності:

$ yum install expat expat-devel openssl openssl-devel

Потім видаліть git:

$ yum remove git git-all

Тепер складіть та встановіть Git на останній версії, у цьому випадку:

$ wget https://github.com/git/git/archive/v2.13.0.tar.gz
$ tar zxf v.2.13.0.tar.gz
$ cd git-2.13.0/

Потім для налаштування:

$ make configure
$ ./configure --with-expat --with-openssl

І нарешті встановіть так:

$ make 
$ make install install-doc install-html install-info

це все, тепер налаштуйте репо з https:

$ git remote add origin https://github.com/*user*/*repo*.git
# Verify new remote
$ git remote -v

якщо ви налаштували ключ ssh на віддаленому сервері, його потрібно видалити.


0

Я отримав цю помилку

Підключення до bitbucket.org закрите віддаленим хостом. fatal: Не вдалося прочитати з віддаленого сховища. Переконайтеся, що у вас є правильні права доступу.

Тоді я спробував

git config --global user.email "you@example.com"

працювали без цитат.



0

Я використовую macOS, і, хоча я наступного разу намагався натиснути, я відкрив свій відкритий ключ у бітбукеті

Доступ до сховища заборонено.

fatal: Не вдалося прочитати з віддаленого сховища.

Переконайтеся, що у вас є правильні права доступу та сховище існує.

Що мені довелося зробити - це крок 2. Додайте ключ до ssh-агента, як описано в посібнику з налаштування ключів Bitbucket SSH та особливо на 3-му кроці:

(лише для macOS) Так що ваш комп'ютер запам'ятовує ваш пароль щоразу, коли він перезавантажується, відкрийте (або створіть) файл ~ / .ssh / config та додайте ці рядки до файлу:

Хост *
UseKeychain так

Сподіваюся, що це допомагає користувачеві Mac з тим же питанням.



0

У мене було це питання, і я думав, що я збожеволів. Я використовую SSH вже 20 років. і git над SSH з 2012 року ... але чому я не міг отримати своє сховище бітбукета на домашньому комп'ютері?

ну, у мене є два облікові рахунки, і в мене було завантажено 4 SSH ключі. навіть якщо мій .ssh / config був налаштований на використання правої клавіші. коли ssh ініціалізував з'єднання, він використовував їх у порядку завантаження в агент. тож я ввійшов у свій особистий обліковий запис.

то отримує заборонену помилку, намагаючись отримати репо. має сенс.

Я вивантажив ключ від агента

ssh-add -d ~/.ssh/personal_rsa

тоді я міг би отримати репост.

... Пізніше я дізнався, що я можу змусити його використовувати лише вказану ідентичність

 Host bitbucket.org-user2
     HostName bitbucket.org
     User git
     IdentityFile ~/.ssh/user2
     IdentitiesOnly yes

Я не знав про цей останній варіант IdentitiesOnly

з самої документації на бітбукет

https://blog.developer.atlassian.com/different-ssh-keys-multiple-bitbucket-accounts/


-1

Просто спробуйте

git remote add origin <HTTP URL>

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