У меня возникли проблемы с получением двух разных ключей SSH / учетных записей GitHub для совместной игры. У меня есть следующие настройки:
Репо доступны с одного аккаунта, используя git@github.com:accountname
Репо доступны из другого аккаунта с помощью git@github.com:anotheraccount
Каждая учетная запись имеет свой собственный ключ SSH. Оба ключа SSH были добавлены, и я создал файл конфигурации. Я не верю, что файл конфигурации правильный. Я не совсем уверен, как указать, что репозитории, используемые с помощью git@github.com:accountname
должны использовать id_rsa
и git@github.com:anotheraccount
должны использовать id_rsa_anotheraccount
.
git pull
продолжал давать сбои и запрашивать пароль школы, несмотря на отдельные файлы Identity, «IdentitiesOnly = yes», отдельные домены и имена хостов, все присутствующие вssh-add -l
... Ключ uni был «первым» независимо от этой настройки. Пришлось переместить его раздел ниже других в .ssh / config, и теперьgit pull
с обоих действий GitHub успешно без запроса пароля uni ssh.Ответы:
Ответ Энди Лестера точен, но я нашел важный дополнительный шаг, который мне нужно было сделать, чтобы заставить это работать. При попытке настроить два профиля, один для личного, а другой для работы, мой
~/.ssh/config
пример был примерно следующим:Мой профиль работы не принимал, пока я не сделал
ssh-add ~/.ssh/work_rsa
. После этого подключения к github использовали правильный профиль. Ранее они по умолчанию использовали первый открытый ключ.Для Не удалось открыть соединение с вашим агентом аутентификации при использовании
ssh-add
,проверьте: https://stackoverflow.com/a/17695338/1760313
источник
ssh-add
то, чего мне не хватало.IdentitiesOnly yes
вHost *
раздел вашего~/.ssh/config
файла. Это заставляет ssh фактически использовать указанные вами IdentityFiles вместо того, чтобы рассылать на сервер все эти сообщения.Я недавно должен был сделать это и должен был просеять все эти ответы и их комментарии, чтобы в конечном итоге собрать информацию воедино, поэтому я поместу все это здесь, в одном посте, для вашего удобства:
Шаг 1: ssh keys
Создайте любые пары ключей, которые вам нужны. В этом примере я назвал меня по умолчанию / оригинал 'id_rsa' (который по умолчанию) и мой новый 'id_rsa-work':
Шаг 2: Конфигурация ssh
Настройте несколько профилей ssh, создав / изменив ~ / .ssh / config . Обратите внимание на немного отличающиеся значения «Host»:
Шаг 3: ssh-add
Вы можете или не можете сделать это. Для проверки перечислите идентификационные отпечатки пальцев, выполнив:
Если ваших записей нет, запустите:
Шаг 4: проверка
Чтобы проверить, что вы все сделали правильно, я предлагаю следующую быструю проверку:
Обратите внимание, что вам придется изменить имя хоста (github / work.github) в зависимости от того, какой ключ / идентификатор вы хотите использовать. Но теперь тебе должно быть хорошо идти! :)
источник
Допустим,
alice
пользователь github.com с 2 или более закрытыми репозиториямиrepoN
. Для этого примера мы будем работать только с двумя именами репозиториевrepo1
иrepo2
https://github.com/alice/repo1
https://github.com/alice/repo2
Вы должны извлекать данные из этих репозиториев, не вводя пароли, вероятно, на сервере или на нескольких серверах. Вы хотите выполнить,
git pull origin master
например, и вы хотите, чтобы это происходило без запроса пароля.Вам не нравится иметь дело с ssh-agent, вы обнаружили (или открываете сейчас)
~/.ssh/config
файл, который позволяет вашему ssh-клиенту знать, какой закрытый ключ использовать в зависимости от имени хоста и имени пользователя, с простой записью конфигурации, которая выглядит следующим образом: этот:Итак, вы пошли дальше и создали свою
(alice_github.id_rsa, alice_github.id_rsa.pub)
пару ключей, затем также перешли к.git/config
файлу своего хранилища и изменили URL своего пульта так,origin
чтобы он был примерно таким:И, наконец, вы пошли в
Settings > Deploy keys
раздел хранилища и добавили содержимоеalice_github.id_rsa.pub
На данный момент вы можете сделать это
git pull origin master
без ввода пароля без проблем.а как насчет второго хранилища?
Таким образом, ваш инстинкт будет заключаться в том, чтобы захватить этот ключ и добавить его в
repo2
ключи Deploy, но github.com выдаст ошибку и сообщит вам, что ключ уже используется.Теперь вы идете и генерируете другой ключ (
ssh-keygen -t rsa -C "alice@alice.com"
конечно, без паролей), и, чтобы это не стало беспорядком, вы теперь будете называть свои ключи так:repo1
пара ключей:(repo1.alice_github.id_rsa, repo1.alice_github.id_rsa.pub)
repo2
пара ключей:(repo2.alice_github.id_rsa, repo2.alice_github.id_rsa.pub)
Теперь вы добавите новый открытый ключ в
repo2
конфигурацию ключей Deploy на github.com, но теперь у вас есть проблема с ssh, с которой нужно иметь дело.Как ssh может сказать, какой ключ использовать, если репозитории размещены в одном
github.com
домене?Ваш
.ssh/config
файл указывает на,github.com
и он не знает, какой ключ использовать, когда пришло время сделать тягу.Итак, я нашел трюк с github.com. Вы можете сообщить своему SSH-клиенту, что каждый репозиторий находится в отдельном поддомене github.com, в этих случаях они будут
repo1.github.com
иrepo2.github.com
Итак, первым делом редактируем
.git/config
файлы на ваших клонах репо, чтобы они выглядели так:Для репо1
Для репо2
И тогда, в вашем
.ssh/config
файле, теперь вы сможете ввести конфигурацию для каждого субдомена :)Теперь вы можете
git pull origin master
без ввода каких-либо паролей из обоих хранилищ.Если у вас есть несколько машин, вы можете скопировать ключи на каждую из машин и использовать их повторно, но я бы посоветовал проделать дополнительную работу, чтобы сгенерировать 1 ключ на машину и выполнить репо. У вас будет намного больше ключей для обработки, но вы будете менее уязвимы, если кто-то будет взломан.
источник
.ssh/config
является решающим шагом - большое спасибо за этоУ меня есть 2 аккаунта на github, и вот что я сделал (на
linux
), чтобы он работал.Ключи
ssh-keygen
назовите их правильно, чтобы облегчить жизнь.ssh-add path_to_private_key
конфигурация
~ / .Ssh / конфигурации
Установить удаленный URL для репо:
Для репо в Host
github-kc
:Для репо в Host
github-abc
:Explaination
Варианты в
~/.ssh/config
:Host
github- <identif_specific_user>Хост может быть любым значением, которое может идентифицировать хост плюс учетную запись, не обязательно должно быть реальным хостом, например,
github-kc
идентифицировать одну из моих учетных записей на github для моего локального ноутбука,Когда задается удаленный URL для git-репо, это значение, которое нужно указывать после
git@
, вот как репо отображается на хосте, напримерgit remote set-url origin git@github-kc:kuchaguangjie/pygtrans.git
Host
]Hostname
укажите фактическое имя хоста, просто используйте
github.com
для github,User
Gitпользователь всегда
git
для GitHub,IdentityFile
укажите ключ для использования, просто укажите путь к открытому ключу,
LogLevel
указать уровень журнала для отладки, если есть какие-либо проблемы,
DEBUG3
дает наиболее подробную информацию.источник
ssh-add path_to_private_key
- вероятно, потому что агент не требуется в этом случае. Файл конфигурации явно определяет путь к ключам.ssh-add
потому что ваши ключи не защищены паролем или (если вы на Mac) брелок OSX обрабатывает это для вас.ssh-add
предотвращает необходимость ввода пароля при каждом доступе к ключам.Используйте
IdentityFile
параметр в вашем~/.ssh/config
:источник
Возможно, более простой альтернативой редактированию конфигурационного файла ssh (как предлагается во всех других ответах) является настройка отдельного хранилища для использования другого (например, не используемого по умолчанию) ключа ssh.
Внутри репозитория, для которого вы хотите использовать другой ключ, запустите:
И убедитесь, что ваш ключ добавлен в ssh-agent, выполнив:
Имейте в виду, что приведенная выше команда только добавит ключ к ssh-agent для вашего текущего сеанса. Если вы хотите, чтобы это работало вечно, вы должны «навсегда» добавить его в свой ssh-agent. Например, вот как это сделать для Ubuntu, а здесь для OSX .
Также должна быть возможность масштабировать этот подход для нескольких репозиториев, используя глобальный git config и условные включения ( см. Пример ).
источник
В моем случае ни одно из решений выше не решило мою проблему, но ssh-agent делает. В основном я сделал следующее:
Сгенерируйте пару ключей, используя ssh-keygen, как показано ниже. Он сгенерирует пару ключей (в этом примере
.\keyfile
и.\keyfile.pub
)ssh-keygen -t rsa -b 4096 -C "yourname@yourdomain" -f keyfile
Загрузить
keyfile.pub
в провайдера gitps -ef | grep ssh-agent
запущен ли он уже)ssh-add .\keyfile
чтобы добавить учетные данныеgit clone git@provider:username/project.git
источник
Я потратил много времени, чтобы понять все шаги. Итак, давайте опишем шаг за шагом:
ssh-keygen -t rsa
. Дайте ему альтернативу вродеproj1.id_rsa
и нажмите без сомнения, потому что вам не нужна фраза-пароль.Добавить новый раздел в
.ssh/config
:Примите во внимание первый раздел и обратите внимание, что
proj1.github.com
мы вернемся к разделу позже.ssh-add ~/.ssh/proj1.id_rsa
proj1.github.com
(именно хост из файла конфигурации).git clone git@proj1.github.com
,Хороший учебник.
Не связывайтесь с хозяевами
источник
id_rsa_proj1
и наproj1_id_rsa
самом деле должны быть одинаковыми. Вы также можете добавить часть о.git/config
настройках из учебника к своему ответу.proj1.id_rsa
противproj1_id_rsa
Я использовал,
Хорошо проснулся.
Используйте вышеуказанные настройки в вашем файле .ssh / config для разных ключей rsa для разных имен пользователей.
источник
В качестве дополнения к ответу @stefano, лучше использовать команду,
-f
когда генерируется новый ключ SSH для другой учетной записи,Так как
id_rsa_work
файл не существует в пути~/.ssh/
, и я создаю этот файл вручную, и он не работает :(источник
Я разместил технику, которую я использую, чтобы справиться с этим здесь
источник