Несколько учетных записей Github с Git в Windows - PullRequest
2 голосов
/ 21 марта 2019

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

В основном все прошло так,

  • Используйте git впервые, который запрашивает учетные данные github, когда толкая в хранилище. Эти учетные данные затем используются для всех проталкивает независимо от того, как клонировалось хранилище (какой ключ ssh, пользователь, и т.д.)
  • Создание ключей SSH для обеих учетных записей github и добавление записей в Конфигурация ssh для этих файлов идентификации. Ключи добавляются к каждому аккаунт на github.
  • Клонировать репо, используя соответствующую запись Host в конфигурации ssh для оригинала аккаунт git clone: ​​/. git
  • Попытка подтолкнуть изменения к репо и успешное клонирование репо с использованием соответствующая запись хоста в конфигурации ssh для второй учетной записи git clone <2nd Host>: <2nd username> /. Git
  • Попытка протолкнуть изменения в репо и получить ошибку, оригинал имя пользователя не имеет разрешения, хотя оно было клонировано с помощью второй пользователь, а точнее ключ ssh.

  • Очистка записей git в диспетчере учетных данных Windows не выполнена решить эту проблему.

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

Наконец-то я смог отправить свои изменения, используя следующее:

GIT_SSH_COMMAND="ssh -i <path to private ssh key for second user>" git push

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

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

  2. Существуют ли какие-либо альтернативы этому или лучшим подходам, которые не являются утомительной работой, такие как ручное изменение значений конфигурации или удаление записей из диспетчера учетных данных Windows?

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


HTTP-пути

https://github.com/schwaggs/testssh

https://github.com/jjschweigert/testrepo

SSH Paths

git@github.com: schwaggs / testssh.git

git@github.com: jjschweigert / testrepo.git

Файл конфигурации SSH

$ cat ~/.ssh/config
Host jjschweigert
 HostName github.com
 User git
 IdentityFile ~/.ssh/jjschweigert_key
Host schwaggs
 HostName github.com
 User git
 IdentityFile ~/.ssh/jjschweigert_key

Клонирование с оригинальной учетной записью

$ git clone jjschweigert:jjschweigert/testrepo.git
Cloning into 'testrepo'...
remote: Enumerating objects: 28, done.
remote: Counting objects: 100% (28/28), done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 28 (delta 0), reused 28 (delta 0), pack-reused 0
Receiving objects: 100% (28/28), done.

Переход на оригинальный аккаунт (jjschweigert)

$ git push
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 12 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 261 bytes | 43.00 KiB/s, done.
Total 2 (delta 0), reused 0 (delta 0)
To jjschweigert:jjschweigert/testrepo.git
   c082e38..31b7830  master -> master

Клонирование со второго аккаунта (schwaggs)

$ git clone schwaggs:schwaggs/testssh.git
Cloning into 'testssh'...
remote: Enumerating objects: 21, done.
remote: Counting objects: 100% (21/21), done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 21 (delta 0), reused 18 (delta 0), pack-reused 0
Receiving objects: 100% (21/21), done.

Переход на дополнительный счет

$ git push
ERROR: Permission to schwaggs/testssh.git denied to jjschweigert.
fatal: Could not read from remote repository.

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

SSH -T выходы

$ ssh -T jjschweigert
Hi jjschweigert! You've successfully authenticated, but GitHub does not provide shell access.


$ ssh -T schwaggs
Hi jjschweigert! You've successfully authenticated, but GitHub does not provide shell access.

Ответы [ 2 ]

3 голосов
/ 21 марта 2019

Очистка записей git в диспетчере учетных данных Windows не решила эту проблему.

Если вы используете ssh URL (git@github.com:<user>/<repo>), менеджер учетных данных не задействован: он предоставляет учетные данные только для https:// URL-адресов.

Используйте git впервые, который запрашивает учетные данные github при отправке в хранилище.

Это будет иметь место, только если URL удаленного источника является https.

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

Это делается через конфигурационный файл ssh: см. Практические примеры:


Из редактирования

Host user1
 HostName github.com
 User git
 IdentityFile ~/.ssh/iser1_key  <<====
Host user2
 HostName github.com
 User git
 IdentityFile ~/.ssh/user1_key  <<==== same key!? Meaning same user!

вы не можете ожидать push как user2, если конфигурация SSH для записи user2 ссылается на закрытый ключ user1.

1 голос
/ 22 марта 2019

В разговоре с VonC вы можете ясно увидеть в файле конфигурации ssh, что файл идентификации для второго пользователя был неверным, так как он указывал на файл первого пользователя. Вторая запись была скопирована с первой, и это значение не изменилось.

После изменения значения так, чтобы оно указывало на правильный ключ, т.е. ~ / .ssh / schwaggs_key, я мог без проблем клонировать и нажать. В качестве примечания я должен установить свойства электронной почты и имени пользователя в git для каждого репозитория, извлеченного из каждого пользователя, т.е. один раз внутри репо,

git config user.email "github account email"

git config user.name "github account username"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...