Как да добавиш публичен SSH ключ в Bitbucket

Трябваше да добавя SSH ключ към Bitbucket акаунт и загубих твърде много време да обикалям из настройките, докато открия къде се слага. Ето го целия проклет URL, след като търсих навсякъде:

https://bitbucket.org/account/settings/ssh-keys/


Защо да ползваш SSH ключове?

Bitbucket спря възможността да се работи с пароли. Ако досега си правил push и pull през HTTPS с app парола, в един момент всичко просто спира да работи и получаваш това:

remote: CHANGE-3222 - Functionality has been deprecated
remote: App passwords are deprecated and must be replaced with API tokens.
remote: https://developer.atlassian.com/cloud/bitbucket/changelog#CHANGE-3222
unable to access 'https://bitbucket.org/workspace/repo.git/': The requested URL returned error: 410

А и докато работеха, app паролите бяха мъка: трябва да настроиш парола в URL-а на remote-а на всяко едно репо, което имаш. Още по-лошо - паролата стои директно в URL-а:

https://USER:SECURE_PASSWORD@bitbucket.org/workspace/repo.git

Вижда се в git remote -v и седи в чист текст в .git/config. И понеже живее вътре в папката на репото, всеки, който се добере до архив на репото ти - zip, бекъп, копирана папка на проекта - получава и паролата, и достъпа. Колко сигурно е това?!

Така че да - можеш да продължиш с HTTPS схемата (вече с API токен), но е досадно и не е сигурно. SSH ключовете са по-чистият вариант - настройваш ги веднъж и git просто работи. Без токени за управление и без нищо, вградено в URL-ите на remote-ите.


Стъпките

  1. Влез в Bitbucket акаунта си
  2. Отвори https://bitbucket.org/account/settings/ssh-keys/
  3. Кликни Add key
  4. Постави публичния си ключ (този, който завършва на .pub), дай му име и запази

Това е. Трудната част беше да намеря страницата.


Използвай SSH схемата за URL-ите на репотата

След като ключът е добавен, можеш да правиш pull и push на всички Bitbucket репота, до които имаш достъп - но само когато remote-ът използва SSH схемата, а не HTTPS.

Провери какво използва репото ти в момента:

git remote -v

Ако виждаш https://bitbucket.org/workspace/repo.git, превключи към SSH:

git remote set-url origin git@bitbucket.org:workspace/repo.git

Съответствието е просто: https://bitbucket.org/<workspace>/<repo>.git става git@bitbucket.org:<workspace>/<repo>.git - обърни внимание на двоеточието след хоста вместо наклонена черта.

А ново репо клонираш директно с SSH адреса:

git clone git@bitbucket.org:workspace/repo.git

Как да генерираш двойката ключове

Можеш да използваш безплатния инструмент Bitbucket Deployment Key в qSandbox (един от моите продукти) - той генерира двойката ключове вместо теб.

Задължително използвай опцията за сваляне (download), така че и двата ключа да се свалят локално - частният и публичният. После постави публичния ключ в Bitbucket по стъпките по-горе.

Ако предпочиташ терминала, класическият начин под Linux (работи и на Mac) е:

ssh-keygen -t ed25519 -C "you@example.com"

Ключовете се записват в ~/.ssh/ - id_ed25519 е частният ключ, а id_ed25519.pub - публичният. Отпечатай публичния, за да го копираш:

cat ~/.ssh/id_ed25519.pub

Друга алтернатива е ogit - инструмент на Orbisius (готин git wrapper, който работи на Linux, Windows и Mac). Генерирането на двойка ключове е толкова просто:

ogit cli key gen --id=bitbucket

Изходът изглежда така:

Generating ed25519 key pair for 'bitbucket'...

Key pair generated successfully!
Private key: ~/.ogit/keys/bitbucket_priv.key
Public key:  ~/.ogit/keys/bitbucket_pub.key

Постави съдържанието на публичния ключ (bitbucket_pub.key) в Bitbucket и си готов.


Едно нещо за запомняне

В Bitbucket отива само публичният ключ. Частният ключ остава на твоята машина или сървър - никога не го поставяй във формуляр на сайт и не го споделяй с никого.

Дано това ти спести обикалянето из настройките.