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