Несколько учетных записей GitHub на одном компьютере? - PullRequest
339 голосов
/ 05 октября 2010

Попытка работать с моими реальными «рабочими» репозиториями и с моими личными репозиториями в git hub с моего компьютера.

Сначала была настроена рабочая учетная запись, и все работает без нареканий.

Моя личная учетная запись, однако, не может подтолкнуть к моему личному репо, настроенному под другой учетной записью / адресом электронной почты.

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

Как я могу выдвигать / извлекать данные из обеих учетных записей из их соответствующих учетных данных github?

Ответы [ 17 ]

220 голосов
/ 05 октября 2010

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

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

Настройка имени пользователя, электронной почты и токена GitHub - Настройки переопределения для отдельных репозиториев https://help.github.com/articles/setting-your-commit-email-address-in-git/

Надеюсь, это поможет.

Примечание: Некоторым из вас может потребоваться использовать разные адреса электронной почты для разных репозиториев. В git 2.13 вы можете настроить электронную почту на основе каталога, отредактировав глобальный конфигурационный файл, найденный по адресу: ~/.gitconfig, используя условные выражения, например:

[user]
    name = Pavan Kataria
    email = defaultemail@gmail.com

[includeIf "gitdir:~/work/"]
    path = ~/work/.gitconfig

И тогда ваша рабочая конфигурация ~ / work / .gitconfig будет выглядеть следующим образом:

[user]
    email = pavan.kataria@company.tld

Спасибо @alexg за то, что сообщили мне об этом в комментариях.

116 голосов
/ 10 декабря 2014

Использовать HTTPS:

изменить удаленный URL на https:

git remote set-url origin https://USERNAME@github.com/USERNAME/PROJECTNAME.git

и ты готов идти:

git push

Чтобы гарантировать, что коммиты выглядят как выполненные пользователем USERNAME, можно настроить user.name и user.email для этого проекта:

git config user.name USERNAME
git config user.email USERNAME@example.com
50 голосов
/ 25 марта 2017

Приведение в форму

Чтобы управлять git-репо под отдельной учетной записью github / bitbucket / любой другой, вам просто нужно сгенерировать новый ключ SSH.

Нопрежде чем мы сможем начать выдвигать / извлекать репозитории с вашим вторым удостоверением личности, мы должны привести вас в форму - давайте предположим, что ваша система настроена с типичной парой ключей id_rsa и id_rsa.pub.Прямо сейчас ваш tree ~/.ssh выглядит следующим образом

$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── id_rsa
└── id_rsa.pub

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

# change to your ~/.ssh directory
$ cd ~/.ssh

# rename the private key
$ mv id_rsa github-mainuser

# rename the public key
$ mv id_rsa.pub github-mainuser.pub

Далее, давайте сгенерируем новую пару ключей - здесь я назову новый ключ github-otheruser

$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/github-otheruser

Теперь, когда мы посмотрим на tree ~/.ssh мы видим

$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── github-mainuser
├── github-mainuser.pub
├── github-otheruser
└── github-otheruser.pub

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

$ (umask 077; touch ~/.ssh/config)

Откройте его в своем любимом редакторе и добавьте следующее содержимое

Host github.com
  User git
  IdentityFile <b>~/.ssh/github-mainuser</b>

Host github.com-otheruser
  HostName github.com
  User git
  IdentityFile <b>~/.ssh/github-otheruser</b>

Предположительно, у вас будет несколько существующих репозиториев, связанных с вашим основным идентификатором github.По этой причине «по умолчанию» github.com Host настроен на использование вашей клавиши mainuser.Если вы не хотите отдавать предпочтение одной учетной записи другой, я покажу вам, как обновить существующих репозиториев в вашей системе, чтобы использовать обновленную конфигурацию ssh.


Добавьте новый ключ SSH в github

Перейдите на github.com / settings / keys , чтобы добавить свой новый общедоступный ключ

Вы можете получить содержимое открытого ключа, используя: скопируйте / вставьте его в github

$ cat ~/.ssh/github-otheruser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDBVvWNQ2nO5...

Теперь все настройки вашего нового пользователя настроены - ниже мы покажем вам, как его использовать.


Подготовка к работе: клонирование репо

Так как же это работает вместе с git и github?Ну, потому что без курицы и яйца нельзя, мы посмотрим на клонирование существующего репо.Эта ситуация может относиться к вам, если у вас есть новая учетная запись github для вашего рабочего места, и вы были добавлены в проект компании.

Допустим, github.com/someorg/somerepo уже существует, и вы были добавлены в него - клонирование так же просто, как

$ git clone <b>github.com-otheruser</b>:someorg/somerepo.git

То, что выделено жирным шрифтом часть должно соответствовать имени Host, которое мы установили в вашем файле ~/.ssh/config.Это корректно соединяет git с соответствующим IdentityFile и правильно аутентифицирует вас с помощью github


Готово: создание нового репо

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

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

$ cd ~
$ mkdir somerepo
$ cd somerepo
$ git init

Теперь настройте этот репо для использования удостоверения личности

$ git config user.name "Mister Manager"
$ git config user.email "someuser@some.org"

Теперь сделайте свой первый коммит

$ echo "hello world" > readme
$ git add .
$ git commit -m "first commit"

Проверьте коммит, чтобы увидеть, что ваша новая личность была использована, используя git log

$ git log --pretty="%H %an <%ae>"
f397a7cfbf55d44ffdf87aa24974f0a5001e1921 Mister Manager <someuser@some.org>

Хорошо, пора нажимать на github!Поскольку github еще не знает о нашем новом репо, сначала перейдите на github.com / new и создайте новое репо - назовите его somerepo

Теперь, чтобынастройте ваш репозиторий, чтобы «общаться» с github, используя правильные идентификационные данные / учетные данные, мы добавили удаленный.Предполагая, что ваше имя пользователя github для вашей новой учетной записи: someuser ...

$ git remote add origin <b>github.com-otheruser</b>:someuser/somerepo.git

То, что выделено жирным шрифтом является абсолютно критическим, и оно должно соответствовать Hostчто мы определили в вашем ~/.ssh/config файле

Наконец, нажмите репо

$ git push origin master

Обновите существующее репо, чтобы использовать новую конфигурацию SSH

Скажи, йоУ вас уже есть клонированный репозиторий, но теперь вы хотите использовать новую конфигурацию SSH. В приведенном выше примере мы сохранили ваши существующие репозитории в такте, назначив предыдущую пару ключей id_rsa / id_rsa.pub на Host github.com в вашем файле конфигурации SSH. В этом нет ничего плохого, но у меня сейчас есть как минимум 5 конфигураций github, и я не люблю думать об одной из них как о конфигурации по умолчанию - я бы предпочел прояснить каждую из них.

Прежде чем у нас было это

Host github.com
  User git
  IdentityFile ~/.ssh/github-mainuser

Host github.com-otheruser
  HostName github.com
  User git
  IdentityFile ~/.ssh/github-otheruser

Итак, теперь мы обновим это до (изменения в полужирный )

Host <b>github.com-mainuser</b>
  <b>HostName github.com</b>
  User git
  IdentityFile ~/.ssh/github-mainuser

Host github.com-otheruser
  HostName github.com
  User git
  IdentityFile ~/.ssh/github-otheruser

Но это означает, что теперь любой существующий репозиторий с пультом github.com больше не будет работать с этим файлом идентификации. Но не волнуйтесь, это простое исправление.

Чтобы обновить любое существующее хранилище для использования вашей новой конфигурации SSH, просто откройте файл git config хранилища и обновите URL!

$ cd existingrepo
$ nano .git/config

Обновление поля удаленного источника (изменения полужирный )

[remote "origin"]
        url = <b>github.com-mainuser:someuser/existingrepo.git</b>
        fetch = +refs/heads/*:refs/remotes/origin/*

Вот и все. Теперь вы можете push / pull до глубины души


Права доступа к файлу ключа SSH

Если у вас проблемы с открытыми ключами, которые работают некорректно, SSH достаточно строг в отношении разрешений для файла , разрешенных для вашего каталога ~/.ssh и соответствующих файлов ключей

Как правило, любые каталоги должны быть 700, а любые файлы должны быть 600 - это означает, что они доступны только для чтения / записи - никакая другая группа / пользователь не может читать / записывать их

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/config
$ chmod 600 ~/.ssh/github-mainuser
$ chmod 600 ~/.ssh/github-mainuser.pub
$ chmod 600 ~/.ssh/github-otheruser
$ chmod 600 ~/.ssh/github-otheruser.pub

Как мне управлять своими SSH-ключами

Я управляю отдельными ключами SSH для каждого хоста, к которому я подключаюсь, так что, если какой-либо один ключ будет скомпрометирован, мне не придется обновлять ключи в любом другом месте, где я использовал этот ключ. Это похоже на то, что когда вы получаете уведомление от Adobe о том, что 150 миллионов информации их пользователей были украдены - теперь вам нужно отменить эту кредитную карту и обновить все службы, которые от нее зависят - что неприятно.

Вот как выглядит мой каталог ~/.ssh: у меня есть один ключ .pem для каждого пользователя, в папке для каждого домена, к которому я подключаюсь. Я использую .pem ключи, поэтому мне нужен только один файл на ключ.

$ tree ~/.ssh
/Users/naomik/.ssh
├── config
├── github.com
│   ├── naomik.pem
│   ├── someusername.pem
├── known_hosts
├── naomi.makes.software
│   ├── naomi.pem
├── somedomain.com
│   ├── someuser.pem
└── someotherdomain.org
    └── someuser.pem

А вот мой соответствующий файл /.ssh/config - очевидно, что материал github важен для ответа на этот вопрос о github, но этот ответ направлен на то, чтобы дать вам знания для управления вашими идентификационными данными ssh на любом количестве служб / машин. *

Host github.com-naomik
  HostName github.com
  User git
  IdentityFile ~/.ssh/github.com/naomik.pem

Host github.com-someuser
  HostName github.com
  User git
  IdentityFile ~/.ssh/github.com/someusername.pem

Host naomi.makes.software
  User naomi
  IdentityFile ~/.ssh/naomi.makes.software/naomi.pem

Host somedomain.com
  HostName 162.10.20.30
  User someuser
  IdentityFile ~/.ssh/somedomain.com/someuser.pem

Host someotherdomain.org
  User someuser
  IdentityFile ~/.ssh/someotherdomain.org/someuser.pem

Получение вашего открытого ключа SSH из PEM-ключа

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

Поэтому, когда github запрашивает ваш открытый ключ ssh, запустите эту команду, чтобы вывести открытый ключ в стандартный вывод - копируйте / вставляйте, где это необходимо

$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAA...

Обратите внимание, это тот же процесс, который я использую для добавления своего ключа на любой удаленный компьютер. Значение ssh-rsa AAAA... копируется в файл ~/.ssh/authorized_keys пульта дистанционного управления


Преобразование ваших id_rsa / id_rsa.pub пар ключей в формат PEM

Значит, вы хотите приручить ключевые файлы и сократить расходы на файловую систему? Конвертировать вашу пару ключей в одинарный PEM очень просто

$ cd ~/.ssh
$ openssl rsa -in id_rsa -outform pem > id_rsa.pem

Или, следуя приведенным выше примерам, мы переименовали id_rsa -> github-mainuser и id_rsa.pub -> github-mainuser.pub - так

$ cd ~/.ssh
$ openssl rsa -in github-mainuser -outform pem > github-mainuser.pem

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

# display the public key
$ cat github-mainuser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==

# generate public key from your new PEM
$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==

Теперь, когда у вас есть файл github-mainuser.pem, вы можете безопасно удалить свои старые файлы github-mainuser и github-mainuser.pub - необходим только файл PEM; просто сгенерируйте открытый ключ всякий раз, когда он вам нужен ^ _ ^


Создание ключей PEM с нуля

Вам не нужно создавать пару секретный / открытый ключ и , затем конвертировать в один ключ PEM. Вы можете создать ключ PEM напрямую.

Давайте создадим newuser.pem

$ openssl genrsa -out ~/.ssh/newuser.pem 4096

Получение того же открытого ключа SSH

$ ssh-keygen -y -f ~/.ssh/newuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACA ... FUNZvoKPRQ==
23 голосов
/ 10 апреля 2012

Создавая различные псевдонимы хоста для github.com в вашем ~ / .ssh / config и назначая каждому псевдониму хоста свой собственный ключ ssh, вы можете легко использовать несколько учетных записей github без путаницы.Это потому, что github.com различает не пользователя, который всегда просто git, а ключ ssh, который вы использовали для подключения.Просто настройте свои удаленные источники, используя собственные псевдонимы хоста. ”

Приведенное выше резюме любезно предоставлено комментариями к сообщению в блоге ниже.

Я нашел это объяснение наиболее яснымИ это работает для меня, по крайней мере, с апреля 2012 года.

http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts/

22 голосов
/ 12 мая 2012

Детали в http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts/, связанные с мишабой, работают для меня очень хорошо.

С этой страницы:

$ touch ~/.ssh/config

Затем отредактируйте этот файл, чтобы он был примерно таким (одна запись на учетную запись):

#Default GitHub
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa

Host github-COMPANY
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa_COMPANY
11 голосов
/ 04 марта 2012

Я использую сценарии оболочки, чтобы переключить меня на любую учетную запись, которую я хочу быть «активной».По сути, вы начинаете с нуля, настраиваете одну учетную запись и работаете правильно, а затем перемещаете эти файлы к имени с соответствующим префиксом.С этого момента вы можете использовать команду "github" или "gitxyz" для переключения:

# my github script
cd ~/.ssh

if [ -f git_dhoerl -a -f git_dhoerl.pub -a -f config_dhoerl ]
then
    ; 
else 
    echo "Error: missing new files"
    exit 1
fi 

# Save a copy in /tmp, just in case
cp id_rsa /tmp
cp id_rsa.pub /tmp
cp config /tmp
echo "Saved old files in /tmp, just in case"

rm id_rsa
rm id_rsa.pub
rm config
echo "Removed current links/files"

ln git_dhoerl id_rsa
ln git_dhoerl.pub id_rsa.pub
ln config_dhoerl config

git config --global user.email "dhoerl@<company>.com"
git config --global github.user "dhoerl"        
git config --global github.token "whatever_it_is"

ssh-add -D

Мне повезло с этим.Я также создал скрипт запуска в XCode (для пользователей Mac), чтобы он не создавал мой проект, если у меня не было правильной настройки (поскольку он использует git):

Запуск сценария, помещенного после зависимостей (с помощью / bin /)ksh как оболочка):

if [ "$(git config --global --get user.email)" != "dhoerl@<company>.com" ]
then
    exit 1
fi

EDIT: добавлены тесты на наличие новых файлов и копирование старых файлов в / tmp для адресации комментария @naomik ниже.

8 голосов
/ 16 сентября 2017

Этот ответ предназначен для начинающих (не относящихся к делу гуру) . У меня недавно была эта проблема, и, возможно, это только я, но большинство ответов, казалось, требовали более глубокого понимания мерзавца. После прочтения нескольких ответов о переполнении стека, включая эту ветку, вот шаги, которые мне нужно было предпринять, чтобы легко переключаться между учетными записями GitHub (например, предположим, две учетные записи GitHub, github.com / personal и gitHub. ком / работа ):

  1. Проверьте наличие существующих ключей ssh: Откройте Терминал и выполните эту команду, чтобы просмотреть / перечислить существующие ключи ssh ls -al ~/.ssh
    Файлы с расширением .pub являются вашими ssh ключей, поэтому у вас должно быть два для учетных записей personal и work. Если есть только один или его нет, пора генерировать другой способ. Пропустите это.

    - Создание ключа ssh : войдите в github (персональный или рабочий), перейдите в Настройки и скопируйте соответствующее письмо.
    Теперь вернитесь в Терминал и запустите ssh-keygen -t rsa -C "the copied email", вы увидите:

    Генерация публичного / приватного rsa пара ключей.
    Введите файл, в котором вы хотите сохранить ключ (/.../.ssh/id_rsa):


    id_rsa - это имя по умолчанию для скоро сгенерированного ключа ssh поэтому скопируйте путь и переименуйте по умолчанию, например /.../.ssh/id_rsa_work при создании для рабочего аккаунта. введите пароль или просто введите, чтобы игнорировать, и вы получите что-то вроде Изображение randomart ключа: и изображение. Готово.
    Повторите этот шаг еще раз для своей второй учетной записи на github. Убедитесь, что вы используете правильный адрес электронной почты и другое имя ключа ssh (например, id_rsa_personal), чтобы избежать перезаписи.
    На этом этапе вы должны увидеть два ключа ssh при повторном запуске ls -al ~/.ssh.
  2. Свяжите ключ ssh с учетной записью gitHub: Следующий шаг - скопируйте один из ключей ssh, запустите его, но замените собственное имя ключа ssh: pbcopy < ~/.ssh/id_rsa_work.pub, замените id_rsa_work.pub на то, что вы назвали своим .
    Теперь, когда наш ключ ssh скопирован в буфер обмена, вернитесь в учетную запись github [Убедитесь, что вы вошли в рабочую учетную запись, если скопированный ключ ssh id_rsa_work], и перейдите к
    *. 1038 * Настройки - ключи SSH и GPG и нажмите кнопку Новый ключ SSH (не Новый ключ GPG Кстати: D)
    дайте название для этого ключа, вставьте ключ и нажмите Добавить ключ SSH. Теперь вы либо успешно добавили ключ ssh, либо заметили, что все это время было нормально (или вы получили ошибку, потому что выбрали Новый ключ GPG вместо Новый ключ SSH : D).
  3. Свяжите ключ ssh с учетной записью gitHub : повторите описанный выше шаг для второй учетной записи.
  4. Отредактируйте глобальную конфигурацию git: Последний шаг - убедиться, что глобальный файл конфигурации осведомлен обо всех учетных записях github (так сказать).
    Запустите git config --global --edit для редактирования этот глобальный файл, если при открытии vim вы не знаете, как его использовать, нажмите i, чтобы войти в режим вставки, отредактируйте файл, как показано ниже, и нажмите esc, а затем :wq, чтобы выйти из режима вставки:

    [inside this square brackets give a name to the followed acc.] name = github_username email = github_emailaddress [any other name] name = github_username email = github_email [credential] helper = osxkeychain useHttpPath = true

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

8 голосов
/ 13 января 2018
  • Перейти к ~ / .ssh
  • Создать файл с именем config (без расширения)
  • Открыть файл конфигурации и добавить приведенные ниже коды.(изменить в соответствии с вашей учетной записью)

    1. Счет 1

      # account_1
      Host gitlab.com-account_1
      HostName gitlab.com
      User git
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/id_rsa_account_1
      
    2. Счет 2

      # Account2
      Host gitlab.com-Account2
      HostName gitlab.com
      User git
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/id_rsa_Account2
      
    3. Аккаунт 3

      # Account_3
      Host github.com-Account3
      HostName github.com
      User git
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/id_rsa_Account_3
      
  • Добавить удаленный URL следующим образом

    1. Аккаунт 1

      git remote add origin git@gitlab.com-account_1:group_name/repo_name.git
      
    2. Счет 2

      git remote add origin git@gitlab.com-Account2:group_name/repo_name.git
      
    3. Счет 3

      git remote add origin github.com-Account3:github_username/repo_name.git
      

Убедитесь, что имена IdentityFile совпадают с именами, которые вы создали во время генерации ключа ssh.

3 голосов
/ 28 марта 2018

Упрощенное и простое исправление во избежание путаницы ..

Для пользователей Windows, использующих несколько или разные учетные записи git для разных проектов.

Выполните следующие действия: Перейдите в Панель управления и найдите Диспетчер учетных данных.Затем перейдите в диспетчер учетных данных -> учетные данные Windows

. Теперь удалите узел git: https // github.com под заголовком общих учетных данных

. Это позволит удалить текущие учетные данные.Теперь вы можете добавить любой проект через git pull, он запросит имя пользователя и пароль.

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

Спасибо

см. Изображение

2 голосов
/ 03 сентября 2013

Я нашел этот драгоценный камень очень полезным: sshwitch

https://github.com/agush22/sshwitch
http://rubygems.org/gems/sshwitch

Помогает выключить ssh ключи. Не забудьте сначала сделать резервную копию всего!

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...