Pytanie w sprawie git, github, ssh, git-submodules, amazon-ec2 – Problemy z podmodułami git, gdy podmoduły są prywatnymi repozytoriami Github

12

Mam prywatne repo na Github, w którym znajdują się 3 submoduły, z których wszystkie 3 są również prywatne.

Wygenerowałem 4 klucze SSH na moim serwerze EC2 i zastosowałem je jako klucze Github do wszystkich 4 prywatnych repozytoriów.

Jestem w stanie sklonować główne repozytorium, ponieważ rozpoznaje klucz SSH. Po uruchomieniu „git submodule update” kończy się niepowodzeniem w prywatnych repozytoriach z następującym błędem:

BŁĄD: Nie znaleziono repozytorium. fatal: zdalny koniec niespodziewanie odłożył słuchawkę

Jeśli ręcznie sprawdzę te prywatne repozytoria, to działa, ale nie przy użyciu polecenia podmodułu git. Dowolny pomysł? Czy to nie jest w pełni obsługiwane?

Twoja odpowiedź

1   odpowiedź
11

Uwierzytelnianie github jest nieco dziwne. Nie używają nazw użytkowników; po prostu wnioskują na podstawie klucza publicznego, który pokazałeś, którym jesteś użytkownikiem. Ponieważ wygenerowałeś cztery klucze rozmieszczania, można zgadnąć, który z nich będzie używany przez twój serwer, gdy łączy się z github - github zaakceptuje każdy z nich, a następnie odrzuci dostęp do repozytoriów, które nie mają tego klucza zarejestrowanego.

W związku z tym najprostszym rozwiązaniem jest użycie pojedynczego klucza wdrażania dla wszystkich repozytoriów.

Jeśli jednak nie możesz, możesz włamać się do tego za pomocą aliasów hosta ssh. Dodaj do serwera~/.ssh/config zwrotki w następujący sposób:

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

Następnie skieruj swoje submoduły narepo-bar:username/bar.git irepo-foo:username/foo.git zamiast używać[email protected]:... Formularz.

To sprawi, że git i ssh będą traktować każde repozytorium jako żyjące na innym serwerze i przekazywać jawny plik tożsamości, więc nie ma wątpliwości, jakiego klucza użyć.

@Len, jak może być, to dość dziwne. github powinien naprawić swoje rzeczy, aby umożliwić używanie tego samego klucza wdrażania podczas wielokrotnych repo :) bdonlan
@Len, to dziwne, ponieważ oznacza to, że muszę coś skonfigurować (~/.ssh/config) przed pobraniem mojej konfiguracji. Odwołanie powinno być na dwa sposoby - odmówienie dostępu do hosta X do repo Y lub cofnięcie klawisza Z z hosta X. Odwołanie klawisza Z z repo Y staje się przylegające. A bdonlan.livejournal.com nie był aktualizowany od sześciu lat :) bdonlan
@bdonlan: Nadal uważam, że to nie jest takie dziwne ;-). Domyślam się, że „filozofia” za kluczem wdrażania polega na tym, że można go odwołać i dokładnie wiedzieć, które repo zostało odwołane. (Btw, OT, ale czy jesteś bdonlan.livejournal.com?) Ashe
@bdonlan: tak, wiem o co ci chodzi; jest trochę niezgrabny. W każdym razie myślałem, że rozpoznałem twoje imię! Ty i ja byliśmywspólni przyjaciele w dzień, kiedy użyłem LJ. Ashe

Powiązane pytania