Вопрос по ssh, github, git, amazon-ec2 – Проблемы с подмодулями git, когда подмодули являются частными репозиториями Github

12

У меня есть частное репо на Github, в котором находятся 3 субмодуля, все 3 из которых также являются частными.

Я сгенерировал 4 ключа SSH на своем сервере EC2 и применил их как ключи развертывания Github ко всем 4 частным репозиториям.

Я могу клонировать основной репозиторий, поскольку он распознает ключ SSH. Когда я запускаю & quot; обновление git submodule & quot; в частных репозиториях происходит сбой со следующей ошибкой:

ОШИБКА: хранилище не найдено. фатальный: удаленный конец неожиданно завис

Если я вручную проверяю эти частные репозитории, это работает, но не при использовании команды git submodule. Любая идея? Это не полностью поддерживается?

Ваш Ответ

1   ответ
11

ователей; они просто определяют на основе открытого ключа, который вы представили, каким пользователем вы являетесь. Поскольку вы сгенерировали четыре ключа развертывания, никто не знает, какой из них будет использоваться вашим сервером при подключении к github - github примет любой из них, а затем отклонит любой доступ к репозиториям, для которых этот ключ не зарегистрирован.

Таким образом, самое простое решение - просто использовать один ключ развертывания для всех репозиториев.

Если вы не можете, однако, вы можете обойти это, используя псевдонимы хоста ssh. Добавьте на свой сервер~/.ssh/config stanzas нравится следующее:

Host repo-foo
  HostName  ssh.github.com
  Port 443
  User git
  IdentityFile /path/to/my-ssh-key-file-for-foo
  IdentitiesOnly yes

Host repo-bar
  HostName ssh.github.com
  Port 443
  User git
  IdentityFile /path/to/my-ssh-key-file-for-bar
  IdentitiesOnly yes

Затем укажите ваши подмодули наrepo-bar:username/bar.git а такжеrepo-foo:username/foo.git вместо использования[email protected]:... форма.

Это приведет к тому, что git и ssh будут обрабатывать каждый репозиторий как находящийся на другом сервере и передавать явный идентификационный файл, поэтому не возникает путаницы в отношении того, какой ключ использовать.

Да, я понял, однако, ключи развертывания уникальны, и я не могу разместить их в нескольких проектах. Я посмотрю, что еще я могу сделать, но я в основном просто хочу без паролей. Miles Johnson
Это не странно; это довольно стандартно! И стандартное решение именно то, что вы предложили. Ashe
@ Len, как ни странно, это довольно странно. Github должен исправить их, чтобы один и тот же ключ развертывания можно было использовать в нескольких репозиториях:) bdonlan
@ bdonlan: я все еще думаю, что это не так странно ;-). Я полагаю, что «философия», лежащая в основе ключа развертывания, заключается в том, что вы можете отозвать один и точно знать, какой репо отзывается. (Кстати, OT, но вы bdonlan.livejournal.com? Ashe
@ Лен, это странно, потому что это означает, что мне нужно что-то настроить ~/.ssh/config) перед загрузкой моей конфигурации. Отмена действительно должна быть двумя способами - запретить хосту X доступ к репо Y или отозвать ключ Z с хоста X. Отзыв ключа Z из репо Y становится неуклюжим. И bdonlan.livejournal.com не обновлялся в течение шести лет bdonlan

Похожие вопросы