Найти в Дзене
Nuances of programming

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

Источник: Nuances of Programming

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

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

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

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

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

У ключей могут быть любые названия, но только не одинаковые: впоследствии будет ясно почему. Для 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, то будет задействован пользователь с электронной почтой ‘sasa.fister@work.net’ и SSH-ключом ‘work_rsa’. А если проект в папке ~/Private (эта папка так же находится на компьютере), то будет использована электронная почта ‘sashafishter@gmail.com’ и ключ ‘id_rsa’.

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

touch ~/.gitconfig-work

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

[user ]
email = "yourgitlabemail@example.com" [core ]
sshCommand = "ssh -i ~/.ssh/work_rsa"

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

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

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

Читайте нас в Telegram , VK

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