Представьте себе такой сценарий: у вас есть 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-ключей.
До встречи в следующей статье!