Przekazywanie agentów za pomocą różnych nazw użytkowników (Git i wdrożenie)

7

To zapytanie nie jest bezpośrednio związane z Git, ale ponieważ jednym z obsługiwanych transportów Gita jest SSH, a ja próbuję użyć przekazywania agentów, pomyślałem, że zapytam o wyjaśnienia (strony man zawiodły mnie)

Próbuję zautomatyzować wdrożenie oprogramowania za pomocą Capistrano, udało mi się zawiesić niektóre problemy (wstępne uruchamianie znanych hostów, przed wdrożeniem itp.), Ale mam następującą sytuację.

Mój zespół loguje się na serwerze jak oni sami, indywidualne konta użytkowników, wszyscy są w developersgrupie i tak umaskjest 002. Żadne z powyższych nie jest tak naprawdę istotne, z wyjątkiem stwierdzenia, że ​​celem jest upewnienie się, że mój zespół może zawsze pracować samodzielnie, bez konieczności posiadania uprawnień superużytkownika.

Łączymy się z serwerem example.comza pomocą ~/.ssh/config:

Host example.com
  User beaks
  ForwardAgent yes
  IdentityFile ~/.ssh/id_rsa_business

Pierwsze logowanie działa idealnie, ssh example.comotwiera połączenie z moim kontem użytkownika i wszystko jest w porządku.

Problem pojawia się w następnym kroku,

git ls-remote [email protected]:project/repository.git

Korzysta z wyżej wymienionej warstwy transportowej Git + SSH (patrz link powyżej) - i zwykle powinien używać mojego klucza agenta przesyłania dalej (z którym zweryfikowałem obecność env | grep SSH_AUTH_SOCK)

Odpowiedź jest prosta: „uwierzytelnienie nie powiodło się (klucz publiczny), drugi koniec został nieoczekiwanie rozłączony”, podejrzewam, ponieważ agent mojego użytkownika nie jest używany, gdy zbliżam się github.comjako jego gitużytkownik wspólny .

Nie mogę również wykluczyć EC2dziwności (polityki bezpieczeństwa itp.) - ale w takim przypadku spodziewałbym się przekroczenia limitu czasu lub awarii połączenia. Jestem pewien, że uderzam github.com- i że mnie nie wpuszczają, ponieważ mój agent nie oferuje mojego beaksklucza dla swojego gitużytkownika.

Chętnie dodam dodatkowe informacje, jeśli coś przeoczyłem.

Lee Hambley
źródło
2
Re „który zweryfikowałem obecny”: Wszystko, co zweryfikowałeś, to obecność gniazda agenta SSH. Użyj, ssh-add -laby upewnić się, że rzeczywiście masz w nim jakieś klucze.
grawity
Ponadto, FYI, nazwy użytkowników są całkowicie nieistotne dla przekazywania agentów, więc nie stanowi to problemu.
grawity

Odpowiedzi:

6

Samo zobaczenie, że ssh-agent działa, jest niewystarczające. Sprawdź, czy klucz jest obecny ssh-add -L Czy sprawdziłeś, czy ten klucz działa z innego hosta? Co ssh-add -Ldrukuje w tym systemie?

Możesz także uruchomić GIT_TRACE=1 git ls-remote ...i wypisze polecenie ssh, które uruchomi. Możesz ręcznie uruchomić polecenie ssh i sprawić, aby działał przed wprowadzeniem git do obrazu.

Seth Robertson
źródło
2
Zapomniałem o tym pytaniu, okazuje się, że agent nie miał klucza, chociaż uzyskiwałem dostęp do klucza bez hasła z powodu buforowania hasła OSX (niezwiązanego z przechowywaniem klucza w agencie) - stąd moje zamieszanie .
Lee Hambley
0

Nikt tak naprawdę nie odpowiedział na to pytanie, więc ludzie przyjeżdżający tutaj mogą skorzystać z mojej odpowiedzi na podobne pytanie. https://superuser.com/a/1141035/3376

Bruno Bronosky
źródło