Несколько учетных записей github на одном компьютере?
пытается работать как на моих фактических" рабочих " репозиториях, так и на моих личных репозиториях на Git hub с моего компьютера.
сначала была настроена рабочая учетная запись, и все работает безупречно.
мой личный кабинет, однако, не может нажать на мое личное РЕПО, которое настроено под другой учетной записью/электронной почтой.
Я попытался скопировать свой рабочий ключ в свой личный кабинет, но это вызывает ошибку, потому что, конечно, ключ может быть прикреплен только к одному счет.
Как я могу нажать / вытащить из обеих учетных записей, из их соответствующих учетных данных github?
15 ответов
все, что вам нужно сделать, это настроить настройку SSH с несколькими парами ключей SSH.
эта ссылка легко следовать (спасибо Эрик): http://code.tutsplus.com/tutorials/quick-tip-how-to-work-with-github-and-multiple-accounts--net-22574
создание SSH-ключей (Win / msysgit) https://help.github.com/articles/generating-an-ssh-key/
кроме того, если вы работаете с несколькими репозитории используя разные персонажи, Вы должны убедиться, что ваши отдельные репозитории имеют пользовательские настройки, переопределенные соответственно:
настройка имени пользователя, электронной почты и токена 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
# account_1 Host gitlab.com-account_1 HostName gitlab.com User git PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa_account_1
-
аккаунт 2
# Account2 Host gitlab.com-Account2 HostName gitlab.com User git PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa_Account2
-
счета 3
# Account_3 Host github.com-Account3 HostName github.com User git PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa_Account_3
-
-
добавить удаленный url следующим образом
-
аккаунт 1
git remote add origin git@gitlab.com-account_1:group_name/repo_name.git
-
аккаунт 2
git remote add origin git@gitlab.com-Account2:group_name/repo_name.git
-
счета 3
git remote add origin github.com-Account3:github_username/repo_name.git
-
убедитесь, что имена IdentityFile такие же, как вы создали во время генерации ключа ssh.
этот ответ для начинающие (нет-гуру git). Недавно у меня была эта проблема, и, возможно, это только я, но большинство ответов, казалось, требовали довольно предварительного понимания git. Прочитав несколько переполнения стека ответы, в том числе в этой теме, вот какие шаги мне нужно предпринять для того, чтобы легко переключаться между гитхаб счетов (например, предположим, два гитхаб счета, github.com/personal и gitHub.com/work):
-
проверьте наличие ключей 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
снова. -
связать 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). - связать ssh-ключ с учетной записью gitHub: повторите вышеуказанный шаг для вашей второй учетной записи.
-
изменить глобальную конфигурацию 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