Использование разных SSH ключей для разных Bitbucket аккаунтов

Опубликовано: Комментариев: 0
Использование разных SSH ключей для разных Bitbucket аккаунтов

Эта краткая заметка расскажет о том, как можно добавить поддержку сразу нескольких SSH ключей для разных аккаунтов Bitbucket. К примеру, такая необходимость может возникнуть если у вас на работе используется bitbucket для хранения исходного кода и вам нужно регать новый аккаунт для этого сервиса, но в тот же момент у вас есть и личный акк на Bitbucket'e, которым тоже нужно пользоваться. 

В таком случае попытка привязать один SSH ключ выдаст ошибку, т.к. у bitbucket 1 ssh ключ = 1 аккаунт. Но есть простое решение, которое заключается в том, чтобы создать config файл для ssh ключей доступа в котором будет явно указано к какому пользователю относится конкретный ssh ключ.

1. Создаем SSH ключ для каждого Bitbucket аккаунта

Чтобы сгенерировать новую пару ключ-значение, пишем в терминале команду, которая создаст и сохранит в папку ~/.ssh/:

ssh-keygen -t rsa -C "your_email@example.com" -f "user1"

где t это тип создаваемого ключа, C создание комментария, f (filename) имя создаваемого файла. Полный список аргументов для ssh-keygen тут.

2. Добавляем SSH ключ в Bitbucket аккаунт

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

3. Конфигурируем SSH

И самый ответственный момент - это создание правильной конфигурации для SSH. Создаем новый файл (если у вас еще нет этого файла):

touch ~/.ssh/config

или делаем backup существующего, если файл с какими-то конфигами уже имеется. И наполняем файл примерно таким содержимым:

#user1 account
 Host bitbucket.org-user1
     HostName bitbucket.org
     User git
     IdentityFile ~/.ssh/user1
     IdentitiesOnly yes

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

заменяя при этом в строках IdentityFile user1 и user2 на созданные ssh файлы, а в Host строке нужно заменить user1 и user2 на ваши логины в bitbucket.

Вот и все. Чтоб клонировать проект test/test с Bitbucket'a под правами конкретного юзера, нужно дописать после имени хоста -user1

git clone git@bitbucket.org-user1:test/test.git

а если проект уже развернут локально, но нужно дальше поддерживать его под конкретным юзером, то открываем на редактирование локальный конфиг git репозитория вашего проекта

nano .git/config

и дописываем аналогично -user1 для значения url:

[remote "origin"]
	url = git@bitbucket.org-user1:test/test.git
	fetch = +refs/heads/*:refs/remotes/origin/*

Вот и все. Аналогичным способом можно указывать разные SSH ключи для разных GIT хранилищ. К примеру, если часть проектов на github, другая часть на bitbucket, а еще что-то на собственных серверах компании, то можно также писать:

#Main work accounts
 Host bitbucket.org-user1
     HostName bitbucket.org
     User git
     IdentityFile ~/.ssh/corporate_key
     IdentitiesOnly yes

 Host github.com
     HostName github.com
     User git
     IdentityFile ~/.ssh/corporate_key
     IdentitiesOnly yes

 #Personal Bitbucket account
 Host bitbucket.org-user2
     HostName bitbucket.org
     User git
     IdentityFile ~/.ssh/personal_key
     IdentitiesOnly yes

P.S. ну и не забывайте указывать в каждом локальном git конфиге проекта соответствующее имя и e-mail юзера, если вы делаете коммиты в различные проекты под различными пользователями, у каждого из которых свой корпоративный e-mail должен быть

Доп. источники на английском:

  1. Tip of the Week: Using different SSH keys for multiple Bitbucket accounts
  2. How to manage multiple GitHub accounts on a single machine with SSH keys