Проблемы с подмодулями git, когда подмодули являются частными репозиториями Github

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

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

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

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

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

Ответ 1

Проверка подлинности github немного нечетна. Они не используют имена пользователей; они просто выходят на основе открытого ключа, который вы представили пользователю. Поскольку вы создали четыре ключа развертывания, каждый может предположить, какой из них будет использоваться вашим сервером, когда он подключится к 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 будут обрабатывать каждый репозиторий как живой на другом сервере и передавать в явный файл идентификатора, поэтому нет путаницы в отношении того, какой ключ использовать.