Git i SSH, który klucz jest używany?

99

Powiedzmy, że Twój .sshkatalog zawiera 30 kluczy (15 prywatnych i 15 publicznych).

Gdzie w Gicie można sprawdzić, które z nich jest używane do łączenia się z danym zdalnym repozytorium?

James Raitsev
źródło
10
Ktokolwiek głosował za „zamknięciem”, to pytanie - jest bezpośrednio związane z programowaniem z tego samego powodu, dla którego dozwolone są pytania o GIT
James Raitsev.
1
Prawdopodobnie ... To naprawdę jest pytanie superużytkownika, problem nie dotyczy git, ale platformy, na której działa. Nie możesz sprawdzić "in git" pod kątem problemu, ponieważ git nie obchodzi, dotyczy on tylko tego, jak używasz ssh i jak jest skonfigurowany. Czy używasz ssh-agent, dowolnego systemu zarządzania kluczami, jakiego systemu operacyjnego używasz, jakiej wersji itp.?
Arafangion

Odpowiedzi:

72

Poniższy wpis w .ssh/configpliku rozwiązuje problem

  host git.assembla.com
  user git
  identityfile ~/.ssh/whatever

Gdzie ~/.ssh/whateverjest ścieżka do twojego klucza prywatnego

Dodatkowo można odebrać użytkownika i hosta

git push [email protected]:repo_name.git
         ^__ ^_______________
         user host
James Raitsev
źródło
więc gdybym chciał użyć innego klucza ssh dla innego hosta, czy powtórzyłbym to samo po pierwszym? Czy plik tożsamości dotyczy pierwszego hosta przed nim?
MikeSchem
ok, tak, wygląda na to, że tak właśnie jest cyberciti.biz/faq/…
MikeSchem
69

Wykonanie ssh w trybie szczegółowym, czyli inaczej ssh -v user@host, wypisuje ogromną ilość informacji debugowania, które zawierają również szczegóły dotyczące plików kluczy, które próbuje się zalogować.

debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/user/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 332
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).

Teraz, jeśli połączysz to, z krokiem 4 na własnej stronie pomocy SSH Git , ssh -vT [email protected]możesz udzielić odpowiedzi.

Uwaga: Możesz również użyć -iprzełącznika, aby powiedzieć ssh podczas wykonywania polecenia, którego pliku klucza użyć.

Vajk Hermecz
źródło
1
Możesz również grepować standardowe wyjście błędów polecenia ssh, aby znaleźć plik klucza w następujący sposób: ssh -vv user@host 2> >(grep Offering)- to ułatwi sprawę. Ostatni plik powinien być kluczem publicznym. Na przykład:debug1: Offering RSA public key: /Users/macbookpro/.ssh/id_rsa
Gianfranco P.
4
githubto nie to samo co git.
ForeverWintr
9

O ile nie jest to określone w .ssh/configpliku, będzie używany domyślny plik klucza prywatnego.

Plik domyślny to ~/.ssh/id_rsalub ~/.ssh/id_dsalub w ~/.ssh/identityzależności od wersji protokołu.

Rodrigo Flores
źródło
Kiedy klucze są dodawane do znanych hostów?
mountainLion
8

Powiedziałbym, że najbardziej praktyczne według mojego gustu byłoby:

GIT_SSH_COMMAND='ssh -v' git …

oczywiście, w zależności od okoliczności, korzystne może być wyeksportowanie go do bieżącego środowiska SHELL, aby nie trzeba było za każdym razem dodawać go ręcznie. Wtedy byłoby tak:

export GIT_SSH_COMMAND='ssh -v'
git …

- Jak man gitsugeruje, istnieje kilka zmiennych środowiskowych, które miałyby wpływ na operacje Gita z użyciem SSH. Zgodnie z opcją man sshwdrażania można uzyskać informacje o debugowaniu -v(nie tylko, ale także zajrzyj do instrukcji, jeśli chcesz dowiedzieć się więcej).

który klucz jest używany?

Na wyjściu zobaczysz coś takiego jak…

debug1: Offering public key: …

… Co jest odpowiedzią na Twoje pytanie qn.

poige
źródło
2
TAK. To powinna być akceptowana odpowiedź. Aby to działało na okna CMD (ugh), zastosowanie: set GIT_SSH_COMMAND=ssh -v. Pomogło mi to zrozumieć, że ścieżka ssh-config Inlcude-Path powinna wyglądać mniej więcej tak w systemie Windows: Include /C/Users/YourUserName.ssh/configaby ssh, a tym samym git, używał pliku konfiguracyjnego, który następnie używa na przykład HOST *wpisu do określenia pliku tożsamości, którego używa git / ssh.
icyerasor
6

Ponieważ gitużywa tylko sshdo połączenia, użyje dowolnego klucza sshdo połączenia ze zdalnym hostem. Zobacz ~/.ssh/configplik po szczegóły; hostblok wykorzystuje IdentityFiledyrektywę określić klucz prywatny do użycia. Strona ssh_config(5)podręcznika zawiera pełne szczegóły.

sarnold
źródło
Hmm ... plik nie istnieje w moim systemie. Czy powinno?
James Raitsev
1
@JAM Jakiego systemu operacyjnego używasz? Czasami plik konfiguracyjny znajduje się pod adresem/etc/ssh/ssh_config
Jestem na MACOS. Znaleziony /etc/ssh_configplik, który wydaje się być plikiem pełnym skomentowanych wpisów
James Raitsev
@sarnold Możesz stworzyć ~/.ssh/configsiebie.
xdazz
4

To może być super edge, ale po uruchomieniu ssh -vT [email protected]pokazało mi, że /root/.sshszuka kluczy, spodziewałem się, że sprawdzi mój katalog domowy, a potem zdałem sobie sprawę, że jestem zalogowany jako root!

Moak
źródło
Ta technika, między innymi ten sam sshsposób przesłuchania, to prawidłowe rozwiązania. Dzięki.
eigenfield
1

Na serwerze zdalnym edytuj plik sshd_config i zmień LogLevel z INFO na VERBOSE i zrestartuj ssh.

Teraz twój plik dziennika będzie zawierał odcisk palca klucza, który został użyty do uwierzytelnienia każdego użytkownika.

W systemie Ubuntu te pliki to:

/etc/ssh/sshd_config
/var/log/auth.log

ale mogą się różnić w innej dystrybucji. Po prostu wygoogluj swoją lokalizację (niektórzy używają na przykład / var / log / secure).

seumasmac
źródło