Несколько учетных записей github на одном компьютере?

пытается работать как на моих фактических" рабочих " репозиториях, так и на моих личных репозиториях на Git hub с моего компьютера.

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

мой личный кабинет, однако, не может нажать на мое личное РЕПО, которое настроено под другой учетной записью/электронной почтой.

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

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

15 ответов


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

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

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

надеюсь, что это помогает.

EDIT: Обновленные ссылки


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

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

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

и вам хорошо идти:

git push

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

git config user.name USERNAME
git config user.email USERNAME@example.com

попадание в форму

чтобы управлять РЕПО git под отдельной учетной записью GitHub/bitbucket / whatever, вам просто нужно создать новый ключ SSH.

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

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

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

# 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 файл, который определит наши ключевые конфигурации. Мы создадим его с помощью proper owner-только для чтения / записи разрешения

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

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

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

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

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


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

над головой github.com/settings/keys добавьте общественные ключ

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

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

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


Getting stuff done: клонирование a РЕПО

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

давайте github.com/someorg/somerepo уже существует, и Вы были добавлены к нему-клонирование так же просто, как
$ git clone github.com-otheruser:someorg/somerepo.git

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


Getting stuff done: создание нового РЕПО

ну, потому что вы не можете иметь курицу без яйца, мы рассмотрим публикацию нового РЕПО на вашем вторичном счете. Эта ситуация относится к пользователям create new контент используя их вторичная учетная запись 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.com/new и создать новый РЕПО – имя его somerepo

теперь, чтобы настроить ваше РЕПО на "разговор" с github, используя правильную идентификацию/учетные данные, мы добавили удаленный. Предполагая, что ваше имя пользователя github для вашей новой учетной записи someuser ...

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

это жирным шрифтом порция абсолютно критична и это должны матч Host что мы определили в

наконец, нажмите РЕПО

$ 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 github.com-mainuser
  HostName github.com
  User git
  IdentityFile ~/.ssh/github-mainuser

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

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

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

$ cd existingrepo
$ nano .git/config

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

[remote "origin"]
        url = github.com-mainuser:someuser/existingrepo.git
        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 ключи к so мне только нужны один на ключ.

$ 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, запустите эту команду, чтобы вывести открытый ключ в stdout-copy / paste, где это необходимо

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

Примечание, это также тот же процесс, который я использую для добавления моего ключа к любой удаленной машине. The ssh-rsa AAAA... значение копируется в


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

Итак, вы хотите приручить вас ключевые файлы и сократить некоторые файловые системы cruft? Преобразование пары ключей в один 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==

путем создания различных псевдонимов хоста для 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/


детали на 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

Я использую сценарии оболочки, чтобы переключить меня на любую учетную запись, которую я хочу быть "активной". По сути, вы начинаете с чистого листа, получаете одну учетную запись, настроенную правильно и работающую, а затем перемещаете эти файлы в имя с правильным префиксом. С этого момента вы можете использовать команду "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 ниже.


спасибо user1107028:

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

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

git удаленного набора URL-адрес источника https://USERNAME@github.com/USERNAME/PROJECTNAME.git и Вы хороши идти:

git push

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


  • перейдите к ~/.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.


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

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

    - создание ключа ssh: войдите в github (персональный или рабочий acc.), перейдите к настройки и скопируйте соответствующее электронное письмо.
    теперь вернитесь в терминал и запустите 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] и выберите
    настройки-SSH и GPG ключи и нажать кнопку новый ключ SSH кнопку (не новый ключ GPG btw: 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 должна быть связана с этим РЕПО, и ее спросили только один раз, локальная конфигурация запомнит это ссылка, а не глобальная конфигурация, поэтому вы можете работать с разными репозиториями, связанными с разными учетными записями, не редактируя глобальную конфигурацию каждый раз.


Я нашел этот камень очень полезным: sshwitch

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

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

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


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

#this store the password permanently
$ git config --global credential.helper wincred

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


проще и легко исправить, чтобы избежать путаницы..

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

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

теперь удалить мерзавец:протокол HTTPS//GitHub-е. ком узел под универсальные учетные данные заголовка

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

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

спасибо

смотрите изображения


вам не нужно поддерживать две разные учетные записи для личных и рабочих. Фактически, Github рекомендует вам поддерживать одну учетную запись и помогает объединить обе.

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

https://help.github.com/articles/merging-multiple-user-accounts/


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

вам нужно :

1) создать SSH пара открытых и закрытых ключей для каждого вашего аккаунта в разделе ~/.ssh локация с разными именами и

2) добавить созданный общественные ключи к соответствующая учетная запись в разделе Settings >> SSH and GPG keys >> New SSH Key.

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

cd ~/.ssh
ssh-keygen -t rsa -C "email@work.com" -f "id_rsa_WORK"
ssh-keygen -t rsa -C "email@gmail.com" -f "id_rsa_PERSONAL"

в результате вышеуказанных команд,id_rsa_WORK и id_rsa_WORK.pub файлы будут созданы для вашего работа учетная запись (ex - git.work.com) и id_rsa_PERSONAL и id_rsa_PERSONAL.pub будет создан для вашего персональный учетная запись (ex - github.com).

после создания, копирования содержимое с каждого (*.pub файл) и выполните шаг 2 для каждой учетной записи.

PS : нет необходимости делать запись хоста для каждой учетной записи git под ~/.ssh/config файл, как указано в других ответах, если имя хоста ваших двух учетных записей отличается.


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