Написання цього для тих, хто тільки починає працювати з Git та BitBucket в Windows, і які не так знайомі з Bash (оскільки це є загальною проблемою і високим рейтингом результатів Google при пошуку повідомлення про помилку в питанні).
Для тих, хто не проти HTTPS і хто шукає швидкого виправлення, прокрутіть донизу цю відповідь, щоб отримати інструкції в розділі ЗА ЛЕГИЙ
Для тих, хто хоче вирішити актуальну проблему, дотримуйтесь інструкцій нижче:
Виправлення проблеми SSH якомога швидше
Це набір інструкцій, отриманих із URL-адреси, на яку посилається VonC. Він був модифікований таким чином, щоб бути максимально стійким і стислим.
Встановіть свою глобальну інформацію, якщо ви ще цього не зробили:
$ 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