Настройка нескольких ключей SSH для нескольких аккаунтов GitHub

Представьте себе такой сценарий: у вас есть 3 аккаунта Github, каждый из которых предназначен для своих целей. Аккаунт A для постоянной работы, аккаунт B для портфельных проектов и аккаунт C для личных проектов. Всякий раз, когда вы собираетесь переключаться между репо в разных аккаунтах, вам нужно будет использовать разные SSH-ключи для каждого аккаунта.

Менять конфигурацию SSH каждый раз, когда вы переключаетесь, — не самое лучшее использование вашего времени. Теперь вы можете подумать, можно ли иметь несколько SSH-ключей для каждого аккаунта и позволить SSH автоматически управлять ими? Да, это возможно, но это может быть довольно сложно, потому что есть одна загвоздка, которую я объясню далее в этой статье.

Я предполагаю, что вы работаете в Linux и у вас уже установлен openssh. Для Mac все будет в порядке. Для Windows вам нужно установить git bash или WSL.

Создание ключей SSH

Первое, что нам нужно сделать, это создать SSH-ключ для каждой учетной записи.
Перейдите в терминал и выполните каждую команду.

ssh-keygen -t rsa -f ~/.ssh/id_rsa_fulltime -C "fulltime@mail.com"
ssh-keygen -t rsa -f ~/.ssh/id_rsa_portfolio -C "portfolio@mail.com"
ssh-keygen -t rsa -f ~/.ssh/id_rsa_personal -C "personal@mail.com"
Войти в полноэкранный режим Выйти из полноэкранного режима

Первая команда создаст SSH-ключ для учетной записи, подключенной к указанному Github email: fulltime@mail.com, и сохранит его по указанному пути: ~/.ssh/id_rsa_fulltime.
Вторая и третья команды делают то же самое соответственно для аккаунта портфолио и личного аккаунта.

Добавление ключей SSH в агент аутентификации SSH

ssh-add ~/.ssh/id_rsa_fulltime
ssh-add ~/.ssh/id_rsa_portfolio
ssh-add ~/.ssh/id_rsa_personal
Вход в полноэкранный режим Выход из полноэкранного режима

Создание конфигурационного файла SSH

Теперь вам нужно перейти в ~/.ssh и создать в нем файл с именем config.
Откройте его с помощью vim или другого текстового редактора и добавьте следующие конфигурации.

Host *
AddKeysToAgent yes
IdentitiesOnly yes

Host github.com-fulltime
HostName github.com
IdentityFile ~/.ssh/id_rsa_fulltime

Host github.com-portfolio
HostName github.com
IdentityFile ~/.ssh/id_rsa_portfolio

Host github.com-personal
HostName github.com
IdentityFile ~/.ssh/id_rsa_personal
Войти в полноэкранный режим Выйти из полноэкранного режима

Host * означает, что конфигурация будет применена к каждому хосту, а не только к github.com-prefix.

AddKeysToAgent указывает SSH запомнить ваш пароль, чтобы вам не нужно было вводить его каждый раз.

IdentitiesOnly — это та загвоздка, о которой я говорил ранее. Допустим, вы сейчас авторизованы под учетной записью fulltime и хотите переключиться на персональную учетную запись. Если вы не указали это, SSH продолжит использовать первый аутентифицированный SSH ключ, даже если мы уже указали разные SSH ключи для каждой учетной записи, в этом случае он будет продолжать использовать полный SSH ключ для каждой учетной записи.

Постфикс (например, -personal) после github.com используется для идентификации различных SSH ключей, вы можете назвать его как угодно, но он должен быть уникальным, обычно я называю его по контексту, в котором используется аккаунт Github.

Окончательная настройка

Если у вас уже есть клонированное репо с Github, вам нужно перейти в каталог репо и отредактировать файл .git/config, чтобы добавить идентификатор postfix к имени хоста github.com. Например, вы уже клонировали репозиторий с именем personal-project из вашего личного аккаунта, чтобы подключить правильный SSH-ключ к репозиторию, вам нужно добавить постфикс -personal к имени хоста github.com.

[remote "origin"]
url = git@github.com-personal:personal-account/personal-project.git
Вход в полноэкранный режим Выход из полноэкранного режима

Если вы хотите клонировать новое репозиторий. Просто добавьте идентификатор postfix к имени хоста github.com в url клонирования.

После этого вам нужно будет установить имя пользователя Github и электронную почту для репозитория.

git config user.name "personal-account"
git config user.email "personal@mail.com"
Вход в полноэкранный режим Выход из полноэкранного режима

Поздравляем, вы успешно настроили несколько SSH-ключей.
До встречи в следующей статье!

Оцените статью
devanswers.ru
Добавить комментарий