Как работать с несколькими GitHub-аккаунтами на своей локальной машине

0
692
views

Перевод статьи «How to manage multiple GitHub accounts on your local machine».

Photo by Headway on Unsplash

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

Что касается меня, даже наладив менеджмент аккаунтов один раз, при настройке новой машины я все равно судорожно пытаюсь вспомнить, как это делается. Поэтому я составил себе небольшую памятку со списком необходимых действий.

Начало

Используйте SSH вместо HTTPS

Чтобы настроить на локальной машине разные аккаунты, мы будем использовать не обычное HTTPS-соединение, а SSH-ключи. Такой подход имеет свои достоинства и недостатки. GitHub периодически меняет свое мнение о том, какой вариант лучше, но вот вам цитата из документации GitHub, поясняющая, почему в данном случае нужно использовать именно SSH-ключи.

«Используя SSH-протокол, вы можете устанавливать соединение и аутентифицироваться на удаленных серверах и сервисах. При помощи SSH-ключей можно устанавливать соединение с GitHub, не указывая каждый раз свой логин и токен личного доступа».

Нам это идеально подходит. Мы ведь не хотим каждый раз заново проходить аутентификацию; напротив, мы хотим отправлять свои коммиты в репозитории так, будто мы вообще не переключались между аккаунтами. Но как это сделать?

Небольшое примечание. Если вы хотите подробнее узнать о разнице между HTTPS и SSH, она отлично описана в документации GitHub.

Разбираемся в структуре SSH на вашей локальной машине

Если говорить по-простому, все это будет работать благодаря созданию уникальных SSH-ключей, которые мы укажем в GitHub-аккаунтах. Github-у не придется каждый раз запрашивать логин с паролем, вместо этого он сможет верифицировать вас по SSH-ключу. Звучит отлично, правда?

Но где на вашей машине хранятся эти ключи?

Они хранятся в директории по адресу ~/.ssh. Там и будет все настраиваться. Приступим!

Примечание редакции Techrocks. У нас есть еще одна статья о SSH-ключах. Возможно, вам будет интересно.

Конфигурация SSH

Если вы никогда прежде не создавали ключей, то директории ~/.ssh у вас пока нет. Создавать ее вручную мы не будем, это сделает машина. Начнем мы с создания нашего первого ключа.

Генерация SSH-ключей

Когда мы создаем SSH-ключи на нашей машине, у нас автоматически генерируются некоторые файлы и настройки. В этом руководстве мы будем исходить из того, что у вас пока нет никаких SSH-ключей, вы все начинаете с нуля.

Начнем с команды, которая генерирует первый ключ:

ssh-keygen -t rsa

Вам будет предложено указать желаемую директорию и имя файла. Нажмите ENTER, чтобы оставить все по умолчанию. Таким образом будет создана директория ~/.ssh.

Теперь у вас есть папка ~/.ssh, а в ней лежит только что созданный SSH-ключ. Давайте используем этот дефолтный ключ для нашего личного аккаунта.

Далее нам нужно создать ключ для рабочего аккаунта (вы можете повторять этот процесс, создавая столько ключей, сколько вам нужно). На этот раз нам нужно использовать пару флагов. При помощи флага -C мы добавим комментарий (тег), а при помощи -f укажем имя файла, в который хотим сохранить ключ.

Переходим в папку ~/.ssh:

cd ~/.ssh

И создаем следующий ключ с пользовательскими флагами.

ssh-keygen -t rsa -C "email@githubworkemail.com" -f "id_rsa_workname"

Если хотите копнуть глубже, можете посмотреть список доступных флагов для SSH-keygen.

Проверим, все ли наши ключи на месте:

ls ~/.ssh

Создаем конфиг для управления несколькими ключами

Теперь, когда мы создали наши ключи, нам нужно прописать в файле конфигурации, какой ключ использовать для доступа к тому или иному GitHub-аккаунту.

Для этого в папке ~/.ssh мы создадим и откроем файл config.

touch ~/.ssh/config && code ~/.ssh/config

Примечание редакции Techrocks. Символы && означают, что вторая команда выполняется при успешном завершении предыдущей. Вторая команда в этом примере — просто открытие файла на редактирование, так что можно воспользоваться любым редактором в терминале (vim, nano и т. п.). Команда code просто откроет редактор кода, установленный на вашей машине (отдельное приложение).

В этом файле мы пропишем наши аккаунты:

# personal account
Host github.com
   HostName github.com
   User git
   IdentityFile ~/.ssh/id_rsa

# work account 1
Host github.com-workname
   HostName github.com
   User git
   IdentityFile ~/.ssh/id_rsa_workname

Здесь нужно обратить внимание на две вещи.

1. Следует запомнить хост: он нам понадобится в дальнейшем.

Host github.com-workname

2. Для IdentityFile нужно указать правильный SSH-ключ.

IdentityFile ~/.ssh/id_rsa_workname

Регистрируем наши ключи в ssh-agent

Для отслеживания разных SSH-ключей и их конфигураций есть сервис под названием ssh-agent. По сути это менеджер ключей для SSH.

В нашем случае нам пригодятся 3 команды.

ssh-add -D // удалить из ssh-agent все уже зарегистрированные на данный момент ssh-ключи

ssh-add -l // вывести список всех ssh-ключей, зарегистрированных в ssh-agent на данный момент

ssh-add ~/.ssh/id_rsa // добавить в ssh-agent конкретный ssh-ключ

Если вы прежде не настраивали никаких ключей, то в вашем ssh-agent скорее всего зарегистрированных ключей нет, но на всякий случай перестрахуемся:

ssh-add -D // удаляет из ssh-agent все уже зарегистрированные на данный момент ssh-ключи

Затем нужно зарегистрировать наши ключи, указав их идентификаторы:

ssh-add ~/.ssh/id_rsa && ssh-add ~/.ssh/id_rsa_workname

Готово! Наша локальная машина настроена. Осталось зарегистрировать наши ключи на GitHub и клонировать первый репозиторий!

Добавляем SSH-ключи к GitHub-аккаунтам

Это делается в два шага. Сперва нужно скопировать нужный ключ, а затем добавить его в свою панель управления на GitHub.

1. Копируем нужный ключ.

pbcopy < ~/.ssh/id_rsa.pub

2. Добавляем ключ на странице https://github.com/settings/keys.

Войдите в ваш рабочий аккаунт на GitHub и повторите этот процесс, добавив «рабочий» SSH-ключ.

Клонируем репозиторий

Важное примечание! Ваш компьютер знает, какой SSH-ключ использовать, потому что мы определили URL в конфиг-файле.

Это означает, что для рабочих репозиториев нам нужно клонировать репозиторий из аккаунта, вот так:

Нам нужно изменить URL:

git@github.com:workname/repo.git ⇒ git@github.com-workname:workname/repo.git

Этот URL мы ранее определили в нашем файле ~/.ssh/config.

**Host github.com-workname  // ЗДЕСЬ**
   HostName github.com
   User git
   IdentityFile ~/.ssh/id_rsa_workname

Теперь вы можете клонировать ваши репозитории и продолжать работу! Возвращаемся к кодингу, товарищи, не задерживаемся!