настройка Git для нескольких репозиториев на одном сервере
возможно, простой вопрос, но я здесь в недоумении...
в github можно добавить ключ развертывания для каждого репозитория, который дает доступ только к этому одному репозиторию.
но для одного клиента у меня есть два проекта, управляемые с git на одном сервере (проект A и проект B). Если я использую открытый ключ для проекта A, github говорит мне, что я не могу использовать его в качестве ключа развертывания для проекта B и наоборот.
Как создать другой открытый ключ и настроить git использовать один ключ для проекта A, а другой для проекта B?
2 ответов
на ssh
способ сделать это будет с помощью ~/.ssh/config
, создание псевдонима имени хоста и доступ к github с разными именами хостов для обоих проектов. Я понятия не имею, есть ли git config
(или git remote
) кстати тоже.
Host a.github.com
HostName github.com
User git
IdentityFile ~/.ssh/project-a-id_rsa
Host b.github.com
HostName github.com
User git
IdentityFile ~/.ssh/project-b-id_rsa
затем использовать a.github.com:user/project-a.git
или b.github.com:user/project-b.git
(или аналогичный) в качестве URL-адресов репозитория.
давайте alice
является 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://git@github.com/alice/repo1.git"
и, наконец, вы пошли в хранилище Settings > Deploy keys
раздел и добавил содержимое alice_github.id_rsa.pub
в этот момент Вы могли бы сделать свой git pull origin master
без ввода пароля без проблем.
но как насчет второго хранилища?
таким образом, ваш инстинкт будет захватить этот ключ и добавить его в repo2
ключи развертывания, но github.com будет ошибка и сказать вам, что ключ уже используется.
теперь вы идете и создайте еще один ключ (используя ssh-keygen -t rsa -C "alice@alice.com"
без паролей, конечно), и чтобы это не стало беспорядком, вы теперь назовете свои ключи так:
-
repo1
keypair:(repo1.alice_github.id_rsa, repo1.alice_github.id_rsa.pub)
-
repo2
keypair:(repo2.alice_github.id_rsa, repo2.alice_github.id_rsa.pub)
теперь вы поставите новый открытый ключ на repo2
конфигурация ключей развертывания на github.com, но теперь у вас есть проблема ssh для решения.
как ssh может определить, какой ключ использовать, если репозитории размещаются на том же github.com
домен?
код .ssh/config
file указывает на github.com
и он не знает, какой ключ использовать, когда пришло время, чтобы сделать тягу.
поэтому я нашел трюк с github.com - ... Вы можете сообщить своему ssh-клиенту, что каждый репозиторий живет в другом github.com поддомен, в этих случаях они будут repo1.github.com
и repo2.github.com
Итак, первое, что редактирует .git/config
файлы на ваших клонах РЕПО, поэтому они выглядят так вместо этого:
для repo1
[remote "origin"]
url = "ssh://git@repo1.github.com/alice/repo1.git"
для repo2
[удаленный "происхождения"] URL-адрес = "ssh://git@repo2.github.com/alice/repo2.git"
и затем на .ssh/config
файл, теперь вы сможете ввести конфигурацию для каждого поддомена:)
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 ключ на машину и РЕПО. У вас будет намного больше ключей для обработки, но вы будете менее уязвимы, если кто-то будет скомпрометирован.