#git #github #ssh-keys #git-push #git-pull
#git #github #ssh-ключи #git-push #git-pull
Вопрос:
У меня есть две учетные записи GitHub (скажем personnel
, и work
). Я настроил свой ~/.ssh/config
файл для работы с несколькими учетными записями. Я создал ssh-ключ для work
учетной записи и добавил открытый ключ в свою work
учетную запись GitHub.
Я создал учетную запись организации и создал частное репозиторий. Я могу клонировать / отправлять / извлекать из этого частного репозитория из своей work
учетной записи. Каждый раз, когда я нажимаю / нажимаю, мне нужно ввести свой пароль, поэтому я добавил команду запуска ключа ssh ssh-add ~/.ssh/id_rsa_work
, и я могу нажимать / тянуть, не вводя пароль снова и снова. Но проблема в том, что после запуска ssh-add ~/.ssh/id_rsa_work
каким-то образом я могу клонировать / нажимать / извлекать этот частный репозиторий из своей personnel
учетной записи, чего, я думаю, не должно происходить.
Я не уверен, что пошло не так, но было бы здорово, если бы кто-нибудь мог направить меня в правильном направлении и сказать мне, что я делаю неправильно. Не стесняйтесь запрашивать соответствующую информацию, если это необходимо (не эксперт по git / GitHub)
Сведения о файле конфигурации:
#Default GitHub (personnel account)
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
#Work Github
Host github_work
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_work
Команда для добавления удаленной учетной pesonnel
записи:
git remote add origin git@github.com:Organisation/hello.git
для work
учетной записи:
git remote add origin git@github_work:Organisation/hello.git
Комментарии:
1. Вы должны были использовать
github-COMPANY
в качестве имени хоста вместоgithub.com
, как описано в статье. Нетssh-add
в любое время.2. @Ry- Да. Я использовал
github-work
(в моем случае) в качестве имени хоста. Все работает хорошо, пока я не запустилssh-add ~/.ssh/id_rsa_work
. Я получил эту идею из этой сути .3. SSH попробует все ключи в агенте аутентификации (
ssh-add
). Такое поведение ожидается. Я бы рекомендовал использовать Git через HTTPS и использовать менеджер учетных данных Git вместо Git через SSH, потому что SSH не знает, какой репозиторий вы используете, а Git credential делает (сgit config credential.useHttpPath true
).4. @ephemient «Такое поведение ожидается» : Странно! Если
personnel
учетная запись не добавлена в качестве соавтора в частное репозиторий, она никогда не должна получать доступ к этому репозиторию, вот чего я ожидаю.5. Для отладки проблем с ssh: run
ssh -v github-personnel
вы должны увидеть, какие ключи используются, в каком порядке.-vv
и-vvv
даст вам еще больше информации об отладке.
Ответ №1:
Во-первых, убедитесь, что на оба удаленных репозитория ссылаются URL-адреса SSH
cd /paath/to/repo
git remote -v
Если один из них использует HTTPS, то он будет использовать учетные данные (имя пользователя / пароль), хранящиеся / кэшированные в вспомогательном хранилище учетных данных, в то время как другой будет использовать закрытый ключ, защищенный правильной парольной фразой.
Во-вторых, вы можете попробовать и протестировать тот же подход с закрытыми ключами, не защищенными парольной фразой, чтобы избежать необходимости иметь дело с ssh-agent, просто для тестирования.
Комментарии:
1. Я попробовал
git remote -v
. Оба используютgit@github
.2. @haccks Тогда мне нужно содержимое
~/.ssh/config
файла, а также точная команда, используемая для клонированияwork
частного репозитория с использованиемpersonnal
записи. (вы можете запутать фактическое имя пользователя / репозиторий)3. Я обновил вопрос с деталями, которые вы просили.
4. @haccks OK: предложения: не использовать github.com как запись хоста. Используйте »
personal
«. Не используйте git@: никогда не упоминайте пользователя, он уже упоминается в каждой записи узла конфигурации. Итак, попробуйтеgit remote add origin personal:Organisation/hello.git
и посмотрите, можете ли вы все еще получить доступ к репозиторию.