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?


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 git@git.assembla.com:repo_name.git
         ^__ ^_______________
         user host

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 git@github.commożesz udzielić odpowiedzi.

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



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.


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.


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.


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 git@github.compokazał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!


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).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.