Как да добавиш публичен 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-ите.
Стъпките
- Влез в Bitbucket акаунта си
- Отвори https://bitbucket.org/account/settings/ssh-keys/
- Кликни Add key
- Постави публичния си ключ (този, който завършва на
.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 отива само публичният ключ. Частният ключ остава на твоята машина или сървър - никога не го поставяй във формуляр на сайт и не го споделяй с никого.
Дано това ти спести обикалянето из настройките.