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

419

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

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

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

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

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

Кевин Уитакер
источник
3
Шаги, приведенные в ссылке http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts, хорошо сработали для меня и просто добавьте одну вещь, которую вы Вам необходимо добавить свой личный ключ репо, также используя <br> & nbsp; ssh-add ~/.ssh/id_rsa_COMPANY <br/> попросить ssh-agent включить его для использования. <hr /> Rest отлично работает для меня с вышеупомянутым руководством.
Brut3e
2
«конечно же, ключ может быть привязан только к одной учетной записи», конечно? Почему?
Спарр
Git 2.13 и выше поддерживает условные включения в .gitconfig, которые являются полезным способом управления удостоверениями в иерархии папок. stackoverflow.com/a/36296990/901597
Джо Боубер,
Возможный дубликат нескольких учетных записей GitHub и
Code-Apprentice

Ответы:

275

Все, что вам нужно сделать, это настроить настройки 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 за то, что сообщили мне об этом в комментариях.

павана
источник
4
Третья ссылка теперь не работает (несколько ключей SSH)
RustyTheBoyRobot
12
эта первая ссылка теперь перенаправляет на страницу «Учетные записи пользователей и организаций» (не уверен, что это было изначально задумано). этот урок был легок для понимания и решил мои проблемы.
Эрик Х.
1
@Camilo Поскольку я не знаю, что такое новая обновленная ссылка, поэтому, если он знает об обновленной ссылке, было бы любезно, если бы он подключил ее :)
Pavan
4
@AlmasAdilbek Уже прошло почти 3 года, ссылки обязательно ломаются и продолжают ломаться. Хотите найти альтернативную статью или снова найти исходный текст, чтобы потом можно было услужливо обновить ссылку для меня, приятель? Я не могу вечно исправлять неработающие ссылки.
Паван
3
Это не ответ без суммирования критических шагов в вашем фактическом посте. Этот ответ уже однажды страдал от гниения ссылок, но не сделал необходимого обновления, чтобы обеспечить фактический ответ на вопрос.
Спасибо,
139

Используйте 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
Грег Лешек
источник
8
Самое простое решение для быстрой загрузки из другого частного репозитория.
Яап Гёртс
1
это лучшее решение, которое я нашел над стеками
Harvinder Singh
Это решение обеспечивает самый простой способ, так как я не хотел добавлять больше ключей ssh. Просто к сведению, если вы уже установили ваши user.nameи user.emailс --globalфлагом, просто делать то , что он говорит , что выше , чтобы установить его на месте только для этого одного репо. Это решило много неприятностей. Теперь, чтобы удалить старый репо ....
thatrobotguy
72

Начало в форме

Чтобы управлять 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 ~/.ssh/github-mainuser

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

Предположительно, у вас будет несколько существующих репозиториев, связанных с вашей основной личностью 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 github.com-otheruser: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 github.com-otheruser: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 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 config хранилища и обновите 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ключи, поэтому мне нужен только один файл на ключ.

$ 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==
Спасибо
источник
2
Я понимаю, что это старый вопрос, но это не оправдывает тот факт, что почти каждый ответ здесь зависит от ссылки на какое-то учебное пособие и поэтому подвержен гниению ссылок. Хорошо связывать источники / цитаты, но вы не можете опираться на ссылку, если не суммируете критические моменты в своем ответе, размещенном здесь.
Спасибо,
Я одобрил ваш превосходный и подробный ответ, так как это явно правильный способ сделать это. Моя проблема в том, что он сложный, и после нескольких лет использования некоторых учетных записей я получаю новый, а затем не могу вспомнить, как это сделать "правильным образом". Мой путь ниже очень прост - я просто создаю 3 новых файла и один новый скрипт, и я готов к работе. Это работало безупречно для меня в течение многих лет. Читатели могут решить, что лучше для них.
Дэвид Х
DavidH Я ценю это замечание. Ответ действительно кажется сложным, если вы берете его в целом, но читателю действительно нужно лишь позаботиться о небольшой части ответа, если его единственная цель - добавить еще одну идентичность github - все оставшиеся части Ответ нацелен на создание надежного решения для управления ключами SSH в целом и является полностью необязательным.
Спасибо
Я думаю, что git clone github.com-otheruser:someorg/somerepo.gitдолжно быть git clone git@github.com-otheruser:someorg/somerepo.git(добавление git@). По крайней мере, это то, что мне было нужно.
CommonsWare
@CommonsWare все параметры командной строки, такие как указание пользователя, также могут быть выполнены в конфигурации SSH. Например: Host github.com( User gitIdentityFile ...
спасибо
24

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

mishaba
источник
1
Вам, вероятно, также понадобится запустить $ ssh-add ~/.ssh/id_rsa_COMPANY- см. Ошибка: Отказано в доступе (publickey) - Документация пользователя
Pat
22

Детали на 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
Мэтью Скелтон
источник
8
я также хотел бы отметить, что при выполнении клонирования (и, возможно, других команд), подобных git clone git@github-COMPANY/repo/name.gitдля получения правильного ключа ssh, потребуется использовать либо «github.com», либо «github-COMPANY» .
Hellatan
@dtan: Как бы я это реализовал, если бы мне пришлось клонировать через https? git clone https://github-COMPANY/GitUserName/projectname.gitне похоже на работу. Ключ по умолчанию, использующий github.com, работает просто отлично.
Исаак Некиттепас
1
@IsaacRemuant, вам обязательно нужно перейти через https? Каждый раз, когда вы хотите вытащить / толкать, вы должны ввести свои учетные данные пользователя. было бы лучше, если бы вы могли сделать git: //github-COMPANY...projectname.git. есть ли сообщения об ошибках для вызова https?
Hellatan
@dtan: У меня были некоторые проблемы с портом 22, несмотря на то, что он был открыт для меня. ssh: connect to host github.com port 22: Bad file number fatal: The remote end hung up unexpectedly, https был единственным способом до сих пор. $ git clone https://github-USER/UserName/test_project_user.git Cloning into test_project_user... error: Couldn't resolve host 'github-USER' while accessing https://github-USER/N UserName/test_project_user.git/info/refs fatal: HTTP request failed Я не уверен, может ли это быть связано с файлом конфигурации или способом, которым я пытаюсь эмулировать ваш git-вызов с помощью https.
Исаак Некиттепас
В конце концов, я сделаю глубокий анализ, попробую все и опубликую это как вопрос.
Исаак Некиттепас
13
  • Перейти к ~ / .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-ключей.

Пранав В.Р.
источник
Не могли бы вы объяснить, почему вы используете PreferredAuthentications publickey?
Оливер Пирмейн
@OliverPearmain Здесь я говорю ssh, что наш предпочтительный метод аутентификации - publickey. Вы можете использовать пароль в PreferredAuthentications, но вам может потребоваться ввести пароль для аутентификации.
Пранав В.Р.
1
Ценю ответ @Pranav VR, звучит так, как будто я хочу использовать то же самое :-)
Оливер Пирмен
11

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

РЕДАКТИРОВАТЬ: добавлены тесты для существования новых файлов и копирования старых файлов в / tmp, чтобы ответить на комментарий @naomik ниже.

Дэвид Х
источник
Будьте осторожны при публикации копируй и вставляй шаблонные / дословные ответы на несколько вопросов, они, как правило, помечаются сообществом как «спам». Если вы делаете это, то обычно это означает, что вопросы являются дубликатами, поэтому пометьте их как таковые: stackoverflow.com/questions/7548158 , stackoverflow.com/questions/3225862 , stackoverflow.com/questions/7924937
Kev
1
Это кошмар. Если кто-то запустит этот сценарий до того, как поймет, что его ключи id_rsaи id_rsa.pubключи будут удалены, они могут быть заблокированы удаленно.
Спасибо,
@naomik обновил скрипт, чтобы сначала проверять наличие новых файлов, а также сохранять старые файлы в / tmp
David H
10

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

  1. Проверка существующих ключей SSH: Открыть терминал и запустить эту командучтобы увидеть / список существующих ключи SSHls -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] и перейдите к
    Настройки - SSH и GPG ключи и нажмите на ключевой Новый SSH кнопку (не Новый ключ GPG между прочим: D)
    дайте некоторое название для этого ключа, вставьте ключ и нажмите Add SSH key. Вы либо успешно добавили ключ 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 должна быть связана с этим репо, и его спросили только один раз, локальная конфигурация запомнит эту ссылку, а не глобальную конфигурацию, чтобы вы могли работать на разных репо, которые связаны с разными учетными записями без необходимости каждый раз редактировать глобальную конфигурацию.

Lukas
источник
Они должны позволять теги для ответов, это для Mac OS.
user4015990
5

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

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

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

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

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

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

Спасибо

обратитесь к изображению

Раджа Шакир
источник
4

просто выяснил это для Windows, используя учетные данные для каждого репо:

cd c:\User1\SomeRepo
git config --local credential.https://github.com.user1 user1
git config --local credential.useHttpPath true
git config --local credential.helper manager
git remote set-url origin https://USERNAME@github.com/USERNAME/PROJECTNAME.git

Формат учетных данных. https://github.com . сообщает помощнику по учетным данным URL-адрес для учетных данных. 'UseHttpPath' указывает менеджеру учетных данных использовать путь для учетных данных. Если useHttpPath не указан, диспетчер учетных данных сохранит одно учетное имя для https://github.com . Если он включен, диспетчер учетных данных будет хранить несколько учетных данных, что я и хотел.

Крейг - MSFT
источник
2

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

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

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

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

agsdot
источник
2

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

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

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

Chetabahana
источник
2

Самый простой и понятный подход (ИМХО) - никаких конфигурационных файлов не слишком много хлопот

Просто создайте другой ключ ssh.

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

sh-keygen -t rsa -C "email@work_mail.com" -f "id_rsa_work_user1"`

Теперь у вас должно быть старое и новое, чтобы увидеть их, запустите:

ls -al ~/.ssh

Вы должны запустить выше только один раз.

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

ssh-add -D
ssh-add ~/.ssh/id_rsa_work_user1 #make to use this without the suffix .pub

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

 ssh-add -D
 ssh-add ~/.ssh/<previous id_rsa>
Kohn1001
источник
1

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

Джет Ю
источник
1

В случае, если вы не хотите связываться с ~/.ssh/configфайлом, упомянутым здесь, вы можете вместо этого запустить git config core.sshCommand "ssh -i ~/.ssh/custom_id_rsa"в репо, где вы хотите зафиксировать из другой учетной записи.

Остальная часть настройки такая же:

  1. Создайте новый ключ SSH для второй учетной записи с ssh-keygen -t rsa -f ~/.ssh -f ~/.ssh/custom_id_rsa

  2. Войдите в github с помощью другой учетной записи, перейдите по адресу https://github.com/settings/keys и вставьте содержимое~/.ssh/custom_id_rsa.pub

  3. Убедитесь, что вы используете SSH вместо HTTPS в качестве удаленного URL: git remote set-url origin git@github.com:upstream_project_teamname/upstream_project.git

thakis
источник
0

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

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

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

Эрик Блэр
источник
0

В отличие от других ответов, где вам нужно выполнить несколько шагов, чтобы использовать две разные учетные записи 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файла public ( ) и выполните Шаг 2 для каждой учетной записи.

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

Сахил Чхабра
источник
Как вы переключаетесь между двумя учетными записями на вашем локальном ПК?
user4015990
1
Там нет необходимости переключаться. Всякий раз, когда вы клонируете репо в локальном режиме, информация об учетной записи будет сохранена в вашем локальном репо. Поэтому всякий раз, когда вы выполняете git push или pull внутри этого локального репо, указанная выше конфигурация будет определять, какую учетную запись следует рассмотреть.
Сахил Чхабра
0

Если у вас установлен WSL, вы можете иметь две отдельные учетные записи git - одну в WSL и одну в Windows.

Almenon
источник
0

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

  • создать публичные / приватные ключи ssh на машине
  • скопируйте и вставьте открытый ключ в интерфейс gitlab / github ui (любой, кто намекает по инструкции через строку cmd, получает бесплатное пиво ...)
  • убедитесь, что вы клонируете репозиторий через git, а не http url
  • установите псевдоним git, чтобы избежать постоянного ввода того же префикса в команду git
  • во время git commit ВСЕГДА используйте флаги автора и электронной почты
  • используйте git как обычно, вы бы это сделали

Все это так:

 # create the public / private key credentials on that specific machine
 ssh-keygen -t rsa -b 4096 -C "<<you>>@org.net" -f ~/.ssh/id_rsa.<<you>>.`hostname -s`

 # setup your public key in the gitlab ui 
 cat ~/.ssh/id_rsa.<<you>>.`hostname -s`

 # make sure you clone the repo via the git and not http url
 git clone git@git.in.org.net:org/some-repo.git

 # set the git alias to avoid constant typing of the repeating prefix to the git cmd
 alias git='GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.<<you>>.`hostname -s`" git'

 # during git commit ALWAYS use the author and e-mail flags
 git add --all ; git commit -nm "$git_msg" --author "YourFirstName YourLastName <you@phz.fi>"

 # use git as normal
 git fetch --all; git pull --all 
Йордан Георгиев
источник
0
  1. Перейдите в каталог, в который вы хотите отправить изменения в другую учетную запись GitHub.
  2. Создайте новый ключ SSH в вашем терминале / командной строке.

    ssh-keygen -t rsa -C «ваш электронный адрес»

  3. Затем будет показано следующее:

    Генерация пары открытый / закрытый ключ RSA. Введите файл для сохранения ключа (/home/your_username/.ssh/id_rsa):

Скопируйте и вставьте путь, за которым следует идентифицируемое имя файла:

/home/your_username/.ssh/id_rsa_personal

4) Затем вам будет предложено следующее:

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

5) Теперь вы можете ввести следующую команду, чтобы увидеть все ключи SSH, которые есть на вашем локальном компьютере:

ls -al ~/.ssh

Вы должны увидеть ваш новый файл ключей SSH. Как вы можете видеть, у меня есть и id_rsa_test, и id_rsa_personal.pub.

drwx------  2 gmadmin gmadmin 4096 Nov 16 22:20 .
drwxr-xr-x 42 gmadmin gmadmin 4096 Nov 16 21:03 ..
-rw-------  1 gmadmin gmadmin 1766 Nov 16 22:20 id_rsa_personal
-rw-r--r--  1 gmadmin gmadmin  414 Nov 16 22:20 id_rsa_personal.pub
-rw-r--r--  1 gmadmin gmadmin  444 Nov  6 11:32 known_hosts

6) Далее вам нужно скопировать ключ SSH, который хранится в файле id_rsa_personal.pub. Вы можете открыть это в текстовом редакторе по вашему выбору. В настоящее время я использую атом, поэтому я открыл файл с помощью следующей команды:

atom ~/.ssh/id_rsa_personal.pub

Затем вы получите что-то похожее на это:

ssh-rsa AAB3HKJLKC1yc2EAAAADAQABAAABAQCgU5 + ELtwsKkmcoeF3hNd7d6CjW + dWut83R / Dc01E / YzLc5ZFri18doOwuQoeTPpmIRVDGHHHHHHHHHHHGHHGMHHGMHHGMHHMXMHHMXMWHHMHMHRXWHHHMHRXWMHHMHRXMHHMHMD1

7) Скопируйте его и перейдите в свою учетную запись GitHub → Настройки → SSH и ключи GPG. 8) Нажмите Новый ключ SSH. Скопируйте ключ, дайте ему название и добавьте его. 9) Добавить ключ от терминала

ssh-add ~/.ssh/id_rsa_personal
Enter passphrase for /home/your_username/.ssh/id_rsa_personal: 

10) Настройте пользователя и пароль.

git config --global user.name "gitusername"
git config --global user.email "gitemail"

11) Мы готовы совершить и подтолкнуть сейчас.

git init
git add .
git commit 
git push
Шрейя Шарма
источник
0

Если вы создали или клонировали другой репозиторий и не смогли извлечь originилиupstream добавить ключ ssh в этот каталог, с помощью следующей команды сработало.

Это ошибка, которую я получил здесь:

Warning: Permanently added the RSA host key for IP address '61:fd9b::8c52:7203' to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Я использовал следующую команду, это работает:

ssh-add ~/.ssh/id_rsa_YOUR_COMPANY_NAME

Риши Радж
источник