Как настроить отдельные SSH-ключи для нескольких учётных записей GitLab

Перейдём сразу к делу. Допустим, у вас есть один GitLab для личных проектов и один для работы. Проблем не возникнет, пока не придётся работать с ними одновременно.

Лично я предпочитаю, чтобы на моём компьютере всё, что связано с работой, было отделено от всего, что с ней не связано. Проблема здесь в том, что нельзя использовать один SSH-ключ с несколькими учётными записями GitLab. Например, с личной почтой должна быть связана одна учётная запись GitLab, а с рабочей почтой  —  другая. Это отличный способ отделить личное от работы, но он сопряжён с некоторыми трудностями.

Раз нельзя использовать один SSH-ключ к нескольким учётным записям GitLab с разными адресами электронной почты, создадим отдельные SSH-ключи для личных и рабочих проектов. Задача может показаться трудновыполнимой. На самом же деле она довольно проста, стоит только освоить основные моменты в её решении.

Первым делом создаём два SSH-ключа с помощью такой команды в терминале:

ssh-keygen -t rsa -C "[email protected]"

У ключей могут быть любые названия, но только не одинаковые: впоследствии будет ясно почему. Для SSH-ключа личных проектов я оставил значение по умолчанию, а SSH-ключ для рабочих проектов назвал work_rsa. Для каждого из ключей указываем рабочую и личную почту.

Следующей командой:

cd ~/.ssh && ll

мы фактически переходим в папку ~/.ssh и выводим список всех файлов. Здесь у нас оба ключа. Один с расширением .pub, другой  —  без.

-rw-------  1 sasa  staff   419B Jan 19 11:24 work_rsa
-rw-r--r--  1 sasa  staff   106B Jan 19 11:24 work_rsa.pub

Тот, что с расширением .pub,  —  это открытый ключ. Он используется для хранения на таких сервисах, как GitHub или GitLab. При попытке подключения к SSH этот ключ сверяется с закрытым локальным ключом (с тем же именем, но без расширения). Если они совпадают, всё хорошо и можно выполнять такие операции, как push, clone, fetch, pull и т. д.

После этого неплохо бы разделить проекты локально, например для того, чтобы личные проекты находились в другой папке:

~/Private
~/Work

Проекты, допустим, такие: ~/Private/TennisApp или ~/Work/ACME. И ключи у них будут разные. Разделение проектов осуществляется посредством редактирования gitconfig, который находится в:

~/.gitconfig

Не перепутайте этот файл с ~/.ssh/config.

Редактируется файл .gitconfig следующим образом:

[includeIf "gitdir:Work/"]
path = .gitconfig-work

Это означает, что если проект находится в ~/Work, то будет задействован пользователь с электронной почтой ‘[email protected]’ и SSH-ключом ‘work_rsa’. А если проект в папке ~/Private (эта папка так же находится на компьютере), то будет использована электронная почта ‘[email protected]’ и ключ ‘id_rsa’.

Теперь создадим файл .gitconfig-work:

touch ~/.gitconfig-work

и поместим внутрь проект:

[user]
    email = "[email protected]"
[core]
   sshCommand = "ssh -i ~/.ssh/work_rsa"

Теперь всё настроено: можно выполнять все операции в git, при этом будут использоваться отдельные SSH-ключи и отдельная почта для каждого из проектов.

Надеюсь, это поможет вам настроить для использования несколько учётных записей GitLab.

Читайте также:

Читайте нас в Telegram, VK и Яндекс.Дзен


Перевод статьи Sasha Fishter: How to handle multiple SSH keys with GitLab