Подтвердить что ты не робот

Git настройка для нескольких репозиций на одном сервере

Наверное, простой вопрос, но я здесь не понимаю...

В github можно добавить ключ развертывания для каждого репозитория, который предоставляет доступ только к одному репозиторию.

Но для одного клиента у меня есть два проекта, управляемых с помощью git на одном сервере (проект A и проект B). Если я использую открытый ключ для проекта A, github говорит мне, что я не могу использовать его в качестве ключа развертывания для проекта B и наоборот.

Как создать другой открытый ключ и настроить git для использования одного ключа для проекта A, а другой для проекта B?

4b9b3361

Ответ 1

Способ 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-адреса репозитория.

Ответ 2

Скажем, 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 знать, какой частный ключ использовать в зависимости от имени хоста и имени пользователя, с простая запись конфигурации, которая выглядит так:

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), затем вы также отправились в файл репозитория .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 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 Deploy на github.com, но теперь у вас есть проблема с ssh.

Как ssh может указать, какой ключ использовать, если репозитории размещены в одном домене github.com?

Ваш файл .ssh/config указывает на 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

[удаленное "происхождение" ]       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 ключ на машину и репо. У вас будет гораздо больше ключей для обработки, но вы будете менее уязвимы, если вы получите компрометацию.