Невозможно нажать на репозиторий Git на Bitbucket

Я создал новый репозиторий, и я столкнулся с странной ошибкой. Я использовал 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.

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

Ответ 1

Это написано для тех, кто только начинает работать с Git и BitBucket в Windows и кто не так хорошо знаком с Bash (поскольку это и общая проблема, и высокий результат Google при поиске сообщения об ошибке в вопросе).

Для тех, кто не возражает против HTTPS и кто ищет быстрое решение, прокрутите до конца этого ответа для инструкций под FOR LAZY

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

Как можно быстрее исправить проблему с SSH

Это набор инструкций, полученных из URL, на который ссылается VonC. Он был изменен, чтобы быть как можно более эластичным и лаконичным.

  • Не вводите $ или любые строки, которые не начинаются с $ ($ означает, что это то, что вы вводите в GitBash).

  • Откройте GitBash

Установите глобальную информацию, если вы еще этого не сделали:

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

Проверьте на OpenSSH:

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

Видите что-то подобное?

  • Да, продолжить
  • Нет: перейдите в раздел FOR LAZY или перейдите по ссылке на статью от 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 и завершающий бит == [email protected])
  • Щелкните правой кнопкой мыши окно (выполняет копирование)
  • Вставьте свой открытый ключ в Блокнот.
  • Удалите все новые строки так, чтобы это была только одна строка.
  • Нажмите CTRL+A затем CTRL+C чтобы снова скопировать открытый ключ в буфер обмена.

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

  • Откройте браузер и перейдите на сайт BitBucket.org
  • Войдите в BitBucket.org
  • Нажмите на свой аватар (вверху справа)
  • Нажмите Управление учетной записью
  • Нажмите SSH Keys (под Security в левом меню)
  • Нажмите Добавить ключ
  • Введите Global Public Key для метки
  • Вставьте открытый ключ, который вы скопировали из Блокнота

Теперь запись Global Public Key должна быть видна в вашем списке ключей.

  • Вернуться в GitBash
  • Перейдите в каталог, содержащий ваш проект
  • Измените свое происхождение на вариант SSH (этого не будет, если вы выполнили шаги FOR THE LAZY)

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

$ git remote -v

Переключитесь на URL SSH:

$ git remote set-url origin [email protected]: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: [email protected]:youruser/yourproject.git
  Push  URL: [email protected]: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://[email protected]/accountname/reponame.git

Использование инструмента с графическим интерфейсом, такого как TortoiseGit или инструментов командной строки.

Вот документация этого альтернативного источника URL.

Командная строка для добавления источника, если он не существует:

git remote add origin https://[email protected]/accountname/reponame.git

Командная строка для изменения существующего источника:

git remote set-url origin https://[email protected]/accountname/reponame.git

ПРИМЕЧАНИЕ: имя вашей учетной записи не ваш адрес электронной почты.

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

git config --global user.name "Your Name"
git config --global user.email "[email protected]"

Затем попробуйте еще раз (нет необходимости совершать еще раз)

git push origin master

Ответ 2

Эта ошибка также возникает, если вы забыли добавить закрытый ключ в ssh-agent. Сделайте это с:

ssh-add ~/.ssh/id_rsa

Ответ 3

Переформатированный означает, что вы, вероятно, удалили ваши общедоступные и частные ключи 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

Ответ 4

Я решил это, удалив удаленный с помощью команды:

git remote remove origin

а затем попытался добавить удаленный, используя https url вместо ssh

git remote add origin httpsUrl

Он запрашивает учетные данные github. Введите учетные данные, а затем попробуйте нажать git, используя:

git push origin master

Ответ 6

У меня была та же проблема. Мои SSH-ключи были установлены правильно. Я исправил эту проблему следующим образом.

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

Ответ 7

Два небольших разъяснения, которые могут спасти кого-то, с кем я столкнулся:

1 - URL-адреса соединений отличаются для HTTPS и SSH

При подключении через https вы используете

https://[email protected]/owner-account/repo-name.git

однако при подключении через SSH имя учетной записи always "git"

ssh://[email protected]/owner-account/repo-name.git

Попытка подключения к SSH с именем вашей учетной записи впереди приведет к ошибке, полученной исходным плакатом. Вот как вы можете выполнить тестирование, подключившись к git @, а затем попробуйте ошибиться с вашим именем пользователя и увидите сообщение об ошибке.

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

Если вы настраиваете SSH-ключи в командных счетах, они рекомендуют переключать их на личные учетные записи. Полезный совет, чтобы избежать e

Ответ 8

Если вы используете SourceTree (я использую 2.4.1), я нашел более простой способ создать ключ SSH и добавить его в мои настройки Bitbucket. Это решило проблему для меня.

  • В SourceTree перейдите в Настройки.
  • Перейдите на вкладку "Аккаунты" и выберите свою учетную запись.
  • Должна быть опция генерации и копирования ключа SSH в буфер обмена.
  • После того, как вы скопировали это, перейдите в Bitbucket в свой браузер. Перейдите в [avatar] → Настройки Bitbucket.
  • Перейдите к SSH-ключам.
  • Нажмите кнопку "Добавить".
  • Вставьте в скопированный ключ.

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

Для справки, на macOS, используя Terminal, вы можете использовать следующую команду для просмотра ключей, сгенерированных для вашего устройства. Здесь хранится сгенерированный ключ.

ls -la ~/.ssh

Как заявили другие, эта документация помогла мне: Использовать протокол SSH с облаком Bitbucket

Ответ 9

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

В левой части нажмите на SSH Keys, затем добавьте тот, который у вас есть в вашей системе, в каталоге ~/.ssh/.

Если у вас еще нет ни одного сгенерированного файла - используйте инструкции с одного из сообщений, но убедитесь, что вы либо используете файл id_dsa.pub по умолчанию, либо пользовательский с именем one, с более поздним требованием параметра -i с путь к ключу при подключении, т.е.

ssh -i ~/.ssh/customkeyname [email protected]_address

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

Ответ 10

Я нашел решение, которое наилучшим образом подходит для меня, разбивало толчок на более мелкие куски.

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

В конце концов, проблема не была проблемой, связанной с ограничениями файлов bin

Ответ 11

Эта ошибка также появляется, когда репозиторий не существует. Я пробовал все ответы, пока не увидел, что в репо не было провалов

Ответ 12

Для ошибок:

[ошибка] недоступен доступ к хранилищу. доступ через ключ развертывания доступен только для чтения. 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/

Затем для configure:

$ 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-ключ на удаленном сервере, вы должны его удалить.

Ответ 13

Я получил эту ошибку

Соединение с bitbucket.org закрыто удаленным хостом. fatal: Не удалось прочитать из удаленного репозитория. Убедитесь, что у вас есть правильные права доступа.

Затем я попробовал

git config --global user.email "[email protected]"

работал без кавычек.

Ответ 14

Я обнаружил, что командная строка git не понравилась моим сгенерированным скриптом ключам (Windows 10).

См. мой ответ на Serverfault

Ответ 15

Я использую macOS и, хотя в следующий раз я установил свой открытый ключ в bitbucket, я попытался нажать, я получил

доступ к хранилищу запрещен.

Неустранимый: Не удалось прочитать из удаленного хранилища.

Пожалуйста, убедитесь, что у вас есть правильные права доступа и хранилище существует.

Что мне нужно было сделать, это Шаг 2. Добавьте ключ в ssh-agent, как описано в Руководстве по установке ключей SSH для Bitbucket, и особенно третий шаг:

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

Хост *
Использовать брелок да

Надеюсь, это поможет пользователю Mac с той же проблемой.

Ответ 16

Сделайте ssh как в учебнике по Atlassian и убедитесь, что закрытый ключ вставляется в профиль, а не в репозиторий :)

Ответ 18

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

git remote add origin <HTTP URL>