Используем сразу несколько github аккаунтов с SSH

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

Итак, дана задача:

У меня есть два аккаунта на GitHub, положим, личный (nattfodd) и рабочий (gimmemoney). Мне нужно использовать для рабочего проекта свой рабочий аккаунт, а для остальных - личный.

С чего начать?

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

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

Теперь у меня есть еще один проект, допустим, находится он в папке ~/private_things.

Первое, что нам нужно сделать - сгенерировать еще один SSH-ключ, и добавить его в профиль нашего личного GitHub-аккаунта:

ssh-keygen -t rsa -C “mail@gmail.com”

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

Далее, на всякий пожарный, удаляем закешированные ключи, и добавляем новый, после чего проверяем, что оба ключа на месте:

ssh-add -D
ssh-add ~/.ssh/id_rsa_nattfodd
ssh-add -l

Управление ключами / репозиториями

А теперь самое важное. Сейчас у нас есть два SSH-ключа, но везде все равно используется только первый, дефолтный, рабочий ключ. Если мы попытаемся запушить что-то в наш личный репозиторий, нам откажут в доступе для пользователя gimmemoney.

Чтобы добавить пользователя nattfodd, нужно создать конфиг для SSH:

touch ~/.ssh/config

Далее открываем этот файл вашим любимым редактором и ваяем:

Host private_things github.com
 HostName github.com
 User git
 IdentityFile ~/.ssh/id_rsa_nattfodd

Где private_things - имя GitHub remote (git remote add private_things github.com/ private_things.git).

Ну и добавляем в конфиг настройки для дефолтного рабочего аккаунта. Допустим, он по-умолчанию у вас называется origin:

Host origin github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa

Собственно, все. Изменения подхватываются сразу же, поэтому если что-то не сработало - вы что-то не так сделали, перезагружать ssh или тем более систему, не надо.