Как управлять несколькими учетными записями GitHub на одной машине с помощью ключей SSH

kak upravlyat neskolkimi uchetnymi zapisyami github na odnoj mashine s

Необходимость управлять несколькими аккаунтами GitHub на одной машине возникает в какой-то момент времени для большинства разработчиков. Каждый раз, когда я меняю свой Mac или нуждаюсь в Git push с новой рабочей учетной записью, я заканчиваю поиском инструкций по поводу того, что делал более полудюжины раз.

Моя лень не документировала процесс и неспособность запомнить шаги заставили меня потратить приличное количество времени, чтобы получить фрагменты со всего Интернета, а потом как-то заставить это работать.

Я уверен, что есть многие из вас, кто был там, сделал это, и многие из вас просто ждут в следующий раз, когда произойдет то же самое (включая меня!). Эти усилия направлены на то, чтобы помочь нам всем.

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

Прежде чем генерировать ключ SSH, мы можем проверить, есть ли у нас ключи SSH: ls -al ~/.ssh Будут перечислены все существующие пары открытых и закрытых ключей, если таковые имеются.

Если ~/.ssh/id_rsa доступный, мы можем использовать его повторно, или мы можем сначала создать ключ по умолчанию ~/.ssh/id_rsa запустив:

ssh-keygen -t rsa

Когда будет предложено указать место для сохранения ключей, примите расположение по умолчанию, нажав ввод. Частный ключ и открытый ключ ~/.ssh/id_rsa.pub будет создан в расположении ssh по умолчанию ~/.ssh/.

Давайте используем эту пару ключей по умолчанию для нашей личной учетной записи.

Для рабочих аккаунтов мы создадим различные ключи SSH. Следующий код создаст ключи SSH и сохранит открытый ключ с тегом. «email@work_mail.com» к ~/.ssh/id_rsa_work_user1.pub

$ ssh-keygen -t rsa -C "email@work_mail.com" -f "id_rsa_work_user1"

Мы создали два разных ключа:

~/.ssh/id_rsa
~/.ssh/id_rsa_work_user1

2. Добавление нового ключа SSH в соответствующую учетную запись GitHub

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

Скопируйте открытый ключ pbcopy < ~/.ssh/id_rsa.pub, а затем войдите в свою личную учетную запись GitHub:

  1. Идти в Settings
  2. Выберите SSH and GPG keys с меню слева.
  3. Нажмите на New SSH keyвведите соответствующее название и вставьте ключ в поле ниже
  4. Нажмите Add key — и готово!

Для рабочих аккаунтов используйте соответствующие открытые ключи (pbcopy < ~/.ssh/id_rsa_work_user1.pub) и повторите приведенные выше действия в своих рабочих аккаунтах GitHub.

3 . Регистрация новых ключей SSH с помощью ssh-агента

Чтобы использовать ключи, мы должны зарегистрировать их в ssh-агент на нашей машине. Убедитесь, что ssh-agent запущен с помощью команды eval "$(ssh-agent -s)".
Добавьте ключи к ssh-агенту так:

ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa_work_user1

Заставьте агент ssh использовать подходящие ключи SSH для разных хостов SSH.

Это важнейшая часть, и мы имеем два разных подхода:

Использование файла конфигурации SSH (шаг 4) и наличие только одного активного ключа SSH в ssh-агенте одновременно (шаг 5).

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

Здесь мы фактически добавляем правила конфигурации SSH для разных хостов, указывая, какой файл идентификации использовать для домена.

Конфигурационный файл SSH будет доступен по адресу ~/.ssh/конфигурация. Отредактируйте его, если он существует, в противном случае мы можем просто создать его.

$ cd ~/.ssh/
$ touch config           // Creates the file if not exists
$ code config            // Opens the file in VS code, use any editor

Сделайте записи конфигурации для соответствующих аккаунтов GitHub, подобные приведенным ниже в вашем ~/.ssh/config файл:

# Personal account, - the default config
Host github.com
   HostName github.com
   User git
   IdentityFile ~/.ssh/id_rsa
   
# Work account-1
Host github.com-work_user1    
   HostName github.com
   User git
   IdentityFile ~/.ssh/id_rsa_work_user1

«work_user1” – это идентификатор пользователя GitHub для рабочей учетной записи.

«github.com-work_user1” — обозначение, используемое для различения нескольких аккаунтов Git. Вы также можете использовать «work_user1.github.com» обозначение тоже. Убедитесь, что вы отвечаете использованной нотации имени хоста. Это актуально, когда вы клонируете хранилище или устанавливаете удаленный источник для локального хранилища

Приведенная выше конфигурация требует ssh-agent:

  • использование id_rsa как ключ для любой URL-адрес Git, использующий @github.com
  • Использовать id_rsa_work_user1 ключ для любого URL-адреса Git, использующего @github.com-work_user1

5. Один активный ключ SSH в ssh-агенте за раз

Для этого подхода не требуются правила конфигурации SSH. Мы вручную гарантируем, что ssh-агент имеет только соответствующий ключ, присоединенный во время любой операции Git.

ssh-add -l покажет список всех ключей SSH, прикрепленных к ssh-агенту. Удалите все и добавьте один ключ, который вы собираетесь использовать.

Если вы собираетесь отправить в личную аккаунт Git:

$ ssh-add -D            //removes all ssh entries from the ssh-agent
$ ssh-add ~/.ssh/id_rsa                 // Adds the relevant ssh key

Ssh-agent теперь имеет ключ, сопоставленный с личной учетной записью GitHub, и мы можем выполнить Git push в личный репозиторий.

Чтобы отправить данные в свою учетную запись GitHub-1, измените ключ SSH, сопоставленный с ssh-agent, удалив существующий ключ и добавив ключ SSH, сопоставленный с рабочей учетной записью GitHub.

$ ssh-add -D
$ ssh-add ~/.ssh/id_rsa_work_user1

Агент ssh имеет ключ, сопоставленный с рабочей учетной записью Github, и вы можете выполнить Git push в рабочее хранилище. Однако для этого нужно немного ручных усилий.

Настройка удаленного URL-адреса git для локальных хранилищ

Как только мы клонируем/создадим локальные хранилища Git, убедитесь, что имя пользователя конфигурации Git и адрес электронной почты соответствуют именно вам. GitHub идентифицирует автора любого комита по идентификатору электронной почты, добавленному к описанию комита.

Чтобы указать название конфигурации и адрес электронной почты в локальном каталоге Git, выполните git config user.name и git config user.email. Если он не найден, обновите его соответствующим образом.

git config user.name "User 1"   // Updates git config user name
git config user.email "user1@workMail.com"

6. Во время клонирования репозиториев

Примечание: шаг 7 поможет, если у нас уже есть локальное хранилище.

Теперь, когда готовы конфигурации, мы можем клонировать соответствующие репозитории. При клонировании обратите внимание, что мы используем имена хостов, которые использовались в конфигурации SSH.

Репозитории можно клонировать с помощью команды клонирования, которую Git предоставляет:

git clone git@github.com:personal_account_name/repo_name.git

Рабочий репозиторий требует внесения изменений с помощью этой команды:

git clone git@github.com-work_user1:work_user1/repo_name.git

Это изменение вносится в зависимости от имени хоста, указанного в конфигурации SSH. Строка между @ и : должна соответствовать тому, что мы указали в файле конфигурации SSH.

7. Для локально существующих хранилищ

Если у нас уже есть клонированный репозиторий:

Перечислите Git удаленный репозиторий, git remote -v

Убедитесь, что URL-адрес соответствует нашему использованному хосту GitHub или обновите URL-адрес удаленного источника.

git remote set-url origin git@github.com-worker_user1:worker_user1/repo_name.git

Убедитесь, что строка между @ и : соответствует хосту, указанному в конфигурации SSH.

Если вы создаете новое хранилище локально:

Инициализируйте Git в папке проекта git init.

Создайте новое хранилище в аккаунте GitHub, а затем добавьте его как удаленный Git в локальное хранилище.

git remote add origin git@github.com-work_user1:work_user1/repo_name.git 

Убедитесь, что строка между @ и : соответствует хосту, указанному в конфигурации SSH.

Отправьте начальный коммит в репозиторий GitHub:

git add .
git commit -m "Initial commit"
git push -u origin master

Мы кончили!

Добавление или обновление удаленного Git локального каталога Git с помощью надлежащего хоста позаботится о выборе правильного ключа SSH для проверки нашей личности из GitHub. Со всем вышесказанным на месте, наш git operations должно работать бесперебойно.

Добавить комментарий

Ваш адрес email не будет опубликован.