Несколько учетных записей GitHub и SSH Config
у меня возникли некоторые проблемы с получением двух разных учетных записей SSH/GitHub, чтобы хорошо играть вместе. У меня есть следующие настройки:
РЕПО доступны с одной учетной записи с помощью [email protected]:accountname
РЕПО доступны с другой учетной записи с помощью [email protected]:anotheraccount
каждая учетная запись имеет свой собственный ключ SSH. Как SSH-ключи были добавлены, и я создал файл config. Я не верю, что файл конфигурации является правильным, хотя. Я не совсем уверен, как указать, что РЕПО доступны используя [email protected]:accountname должны использовать id_rsa и [email protected]:anotheraccount должны использовать id_rsa_anotheraccount.
11 ответов:
ответ Энди Лестера точен, но я нашел важный дополнительный шаг, который мне нужно было сделать, чтобы заставить это работать. Пытаясь настроить два профиля, один для личного и один для работы, my
~/.ssh/configпримерно так:Host me.github.com HostName github.com PreferredAuthentications publickey IdentityFile ~/.ssh/me_rsa Host work.github.com HostName github.com PreferredAuthentications publickey IdentityFile ~/.ssh/work_rsaмой профиль работы не взял, пока я не сделал
ssh-add ~/.ssh/work_rsa. После этого соединения с github использовали правильный профиль. Ранее они по умолчанию использовали первый открытый ключ.на не удалось открыть подключение к вашей аутентификации агент при использовании
ssh-add,
Регистрация: https://stackoverflow.com/a/17695338/1760313
недавно мне пришлось это сделать и пришлось просеять все эти ответы и их комментарии, чтобы в конечном итоге собрать информацию вместе, поэтому я помещу все это здесь, в одном посте, для вашего удобства:
Шаг 1: ssh ключи
Создайте любые пары клавиш, которые вам понадобятся. В этом примере я назвал меня default / original ' id_rsa '(который является значением по умолчанию) и мой новый 'id_rsa-work':ssh-keygen -t rsa -C "[email protected]"
Шаг 2: SSH config
Набор до нескольких профилей ssh путем создания / изменения ~/.ssh / config. Обратите внимание на несколько отличающиеся значения' Host':# Default GitHub Host github.com HostName github.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa # Work GitHub Host work.github.com HostName github.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa_work
Шаг 3: ssh-add
Вы можете или не можете сделать это. Чтобы проверить, список идентификационных отпечатков пальцев, запустив:$ ssh-add -l 2048 1f:1a:b8:69:cd:e3:ee:68:e1:c4:da:d8:96:7c:d0:6f stefano (RSA) 2048 6d:65:b9:3b:ff:9c:5a:54:1c:2f:6a:f7:44:03:84:3f [email protected] (RSA)если ваши записи там нет, то запустите:
ssh-add ~/.ssh/id_rsa_work
Шаг 4: Тест
Чтобы проверить, что вы все сделали правильно, я предлагаю следующее быстро проверьте:$ ssh -T [email protected] Hi stefano! You've successfully authenticated, but GitHub does not provide shell access. $ ssh -T [email protected] Hi stefano! You've successfully authenticated, but GitHub does not provide shell access.обратите внимание, что вам придется изменить имя хоста (github / work.github) в зависимости от того, какой ключ/идентификатор вы хотите использовать. Но теперь вы должны быть хорошо идти! :)
скажем
aliceis a github.com пользователь, с 2 или более частными репозиториямиrepoN. В этом примере мы будем работать только с двумя репозиториями с именемrepo1иrepo2
https://github.com/alice/repo1
https://github.com/alice/repo2вы должны быть, чтобы вытащить из этих хранилищ без ввода паролей, вероятно, на сервере или на нескольких серверах. Вы хотите выполнить
git pull origin masterнапример, и вы хотите, чтобы это произошло, не спрашивая пароль:.вам не нравится иметь дело с ssh-агентом, вы обнаружили (или вы обнаруживаете сейчас) о
~/.ssh/configфайл, который позволяет вашему ssh-клиенту знать, какой закрытый ключ использовать в зависимости от имени хоста и имени пользователя, с простой записью конфигурации, которая выглядит так:Host github.com HostName github.com User git IdentityFile /home/alice/.ssh/alice_github.id_rsa IdentitiesOnly yesИтак, вы пошли вперед и создали свой
(alice_github.id_rsa, alice_github.id_rsa.pub)keypair, затем вы также пошли в свой репозиторий.git/configфайл и вы изменили url вашего удаленногоoriginбыть чем-то вроде это:[remote "origin"] url = "ssh://[email protected]/alice/repo1.git"и, наконец, вы пошли в хранилище
Settings > Deploy keysраздел и добавил содержимоеalice_github.id_rsa.pubв этот момент Вы могли бы сделать свой
git pull origin masterбез ввода пароля без проблем.а как же второй репозиторий?
так что ваш инстинкт будет захватить этот ключ и добавить его в
repo2' Ы развернуть ключи, но github.com будет ошибка и сказать вам, что ключ уже используется.теперь вы идете и сгенерируйте другой ключ (используя
ssh-keygen -t rsa -C "[email protected]"без паролей, конечно), и чтобы это не стало беспорядком, теперь вы назовете свои ключи так:
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' S развертывает конфигурацию ключей на github.com, но теперь у вас есть проблема ssh для решения.как ssh может сказать, какой ключ использовать, если репозитории размещаются на том же
github.comдомен?код
.ssh/configfile указывает наgithub.comи он не знает, какой ключ использовать, когда пришло время, чтобы сделать тягу.так что я нашел трюк с github.com. вы можете сказать своему ssh-клиенту, что каждый репозиторий живет в другом github.com поддомен, в этих случаях они будут
repo1.github.comиrepo2.github.comИтак, первое, что редактирует
.git/configфайлы на ваших клонах РЕПО, поэтому они выглядят так вместо этого:для repo1
[remote "origin"] url = "ssh://[email protected]/alice/repo1.git"для repo2
[remote "origin"] url = "ssh://[email protected]/alice/repo2.git"и затем на
.ssh/configfile, теперь вы сможете ввести конфигурацию для каждого поддомена:)Host repo1.github.com HostName github.com User git IdentityFile /home/alice/.ssh/repo1.alice_github.id_rsa IdentitiesOnly yes Host repo2.github.com HostName github.com User git IdentityFile /home/alice/.ssh/repo2.alice_github.id_rsa IdentitiesOnly yesтеперь вы можете
git pull origin masterбез ввода паролей из обоих репозиториев.если у вас есть несколько машин, вы можете скопировать ключи на каждую из машин и повторно использовать их, но я бы посоветовал сделать работу ног, чтобы создать 1 ключ на каждую машину машина и РЕПО. У вас будет гораздо больше ключей для обработки, но вы будете менее уязвимы, если один из них будет скомпрометирован.
использовать в своем
~/.ssh/config:Host github.com HostName github.com IdentityFile ~/.ssh/github.rsa User petdance
у меня есть 2 счета на github, и вот что я сделал (на
linux), чтобы заставить его работать.ключи
- создать 2 пары ключей rsa, через
ssh-keygen, назовите их правильно, так что сделать жизнь проще.- добавить закрытые ключи к локальному Агенту через
ssh-add path_to_private_key- для каждой учетной записи github загрузите (отдельный) public ключ.
конфигурация
~/.ssh / config
Host github-kc Hostname github.com User git IdentityFile ~/.ssh/github_rsa_kc.pub # LogLevel DEBUG3 Host github-abc Hostname github.com User git IdentityFile ~/.ssh/github_rsa_abc.pub # LogLevel DEBUG3установить удаленный URL-адрес репозитория:
- для РЕПО в узле
github-kc:git remote set-url origin git@github-kc:kuchaguangjie/pygtrans.git- для РЕПО в узле
github-abc:git remote set-url origin git@github-abc:abcdefg/yyy.git
объяснение
опции
~/.ssh/config:
Hostgithub -
Хост может быть любым значением, которое может идентифицировать хост плюс учетную запись, это не должен быть настоящий хозяин, напримерgithub-kcопределите одну из моих учетных записей на github для моего местного ноутбук,при установке удаленного url для Git РЕПО, это значение, чтобы поставить после
git@, вот как РЕПО сопоставляется с хостом, напримерgit remote set-url origin git@github-kc:kuchaguangjie/pygtrans.git- [Ниже приведены дополнительные параметры
Host]Hostname
укажите фактическое имя хоста, просто используйтеgithub.comдля github,Usergit
пользователь всегдаgitдля github,IdentityFile
укажите ключ для использования, просто поместите путь к открытому ключу,LogLevel
укажите уровень журнала для отладки, если есть какие-либо проблемы,DEBUG3дает наиболее подробную информацию.
в моем случае ни одно из решений выше не решило мою проблему, но ssh-agent делает. В принципе, я сделал следующее:
создать пару ключей с помощью ssh-keygen показано ниже. Он будет генерировать пару ключей (в этом примере
.\keyfileи.\keyfile.pub)
ssh-keygen -t rsa -b 4096 -C "yourname@yourdomain" -f keyfileзагрузить
keyfile.pubк провайдеру git- запустите ssh-агент на вашем компьютере (вы можете проверить с помощью
ps -ef | grep ssh-agentчтобы увидеть, если он работает уже)- Run
ssh-add .\keyfileдобавить учетные данные- теперь вы можете запустить
git clone git@provider:username/project.git
Я потратил много времени, чтобы понять все шаги. Итак, давайте описывать шаг за шагом:
- создать новый идентификационный файл с помощью
ssh-keygen -t rsa. Дайте ему альтернативу, какproj1.id_rsaи ударил без сомнения, потому что вам не нужен пароль.Добавить новый раздел
.ssh/config:
Host proj1.github.com
HostName github.com PreferredAuthentications publickey IdentityFile ~/.ssh/proj1.id_rsaпримите во внимание первый раздел и обратите внимание, что
proj1.github.comмы вернемся к разделу позже.
- добавить идентификатор к агенту ssh
ssh-add ~/.ssh/proj1.id_rsa- это то, что я испортил в первый раз-теперь, когда вы хотите клонировать РЕПО proj1, вы делаете это с помощью
proj1.github.com(точно хост из файла конфигурации).git clone [email protected].не связывайтесь с хостами
Я,
Host github.com HostName github.com IdentityFile ~/.ssh/github_rsa User [email protected]Он проснулся нормально.
используйте вышеуказанные настройки в вашем .файл ssh / config для разных ключей rsa для разных имен пользователей.
в качестве дополнения к ответу @stefano, Лучше использовать команду
-fпри создании нового ключа SSH для другой учетной записи,ssh-keygen -t rsa -f ~/.ssh/id_rsa_work -C "[email protected]"С
id_rsa_workфайл не существует в path~/.ssh/, и я создаю этот файл вручную, и он не работает: (
Я использую сценарии оболочки, чтобы переключить меня на любую учетную запись, которую я хочу быть "активным". По сути, вы начинаете с нового старта, получаете одну учетную запись, настроенную правильно и работающую, а затем перемещаете эти файлы в имя с соответствующим префиксом. С этого момента вы можете использовать команду "github" или "gitxyz" для переключения:
# my github script cd ~/.ssh rm id_rsa rm id_rsa.pub rm config ln git_dhoerl id_rsa ln git_dhoerl.pub id_rsa.pub ln config_dhoerl config git config --global user.email "[email protected]" git config --global github.user "dhoerl" # git config --global github.token "whatever_it_is" # now unused ssh-add -Dмне очень повезло с этим. Я также создал скрипт запуска в Xcode (для вас, пользователей Mac), поэтому он не будет строить мой проект, если у меня не будет правильной настройки (так как его с помощью git):
запустить скрипт, размещенный после зависимостей:
#! /bin/ksh if [ "$(git config --global --get user.email)" != "dhoerl@<company>.com" ] then exit 1 fi
возможно, более простой альтернативой редактированию файла конфигурации ssh (как предлагается во всех других ответах) является настройка отдельного репозитория для использования другого (например, нестандартного) ключа ssh.
внутри репозитория, для которого вы хотите использовать другой ключ, выполните команду:
git config core.sshCommand 'ssh -i ~/.ssh/id_rsa_anotheraccount'и убедитесь, что ваш ключ добавлен в ssh-агент, запустив:
ssh-add ~/.ssh/id_rsa_anotheraccountимейте в виду, что команда выше добавит ключ только к ssh-агенту для вашего текущего сеанса. Если вы хотите, чтобы это работало, вы должны "постоянно" добавить его в свой ssh-агент. Например, вот как это сделать для ubuntu и здесь OSX.
также должно быть возможно масштабировать этот подход для нескольких репозиториев с использованием глобальной конфигурации git и условных включений (пример).
Comments