Powiedzmy, że Twój .ssh
katalog 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?
Powiedzmy, że Twój .ssh
katalog 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?
Odpowiedzi:
Poniższy wpis w .ssh/config
pliku rozwiązuje problem
host git.assembla.com
user git
identityfile ~/.ssh/whatever
Gdzie ~/.ssh/whatever
jest ś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
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.com
możesz udzielić odpowiedzi.
Uwaga: Możesz również użyć -i
przełącznika, aby powiedzieć ssh podczas wykonywania polecenia, którego pliku klucza użyć.
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
github
to nie to samo co git
.
O ile nie jest to określone w .ssh/config
pliku, będzie używany domyślny plik klucza prywatnego.
Plik domyślny to ~/.ssh/id_rsa
lub ~/.ssh/id_dsa
lub w ~/.ssh/identity
zależności od wersji protokołu.
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 git
sugeruje, istnieje kilka zmiennych środowiskowych, które miałyby wpływ na operacje Gita z użyciem SSH. Zgodnie z opcją man ssh
wdraż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.
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/config
aby 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.
Ponieważ git
używa tylko ssh
do połączenia, użyje dowolnego klucza ssh
do połączenia ze zdalnym hostem. Zobacz ~/.ssh/config
plik po szczegóły; host
blok wykorzystuje IdentityFile
dyrektywę określić klucz prywatny do użycia. Strona ssh_config(5)
podręcznika zawiera pełne szczegóły.
/etc/ssh/ssh_config
/etc/ssh_config
plik, który wydaje się być plikiem pełnym skomentowanych wpisów
~/.ssh/config
siebie.
To może być super edge, ale po uruchomieniu ssh -vT git@github.com
pokazało mi, że /root/.ssh
szuka kluczy, spodziewałem się, że sprawdzi mój katalog domowy, a potem zdałem sobie sprawę, że jestem zalogowany jako root!
ssh
sposób przesłuchania, to prawidłowe rozwiązania. Dzięki.
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).