Mam serwer Ubuntu działający w chmurze. Utworzyłem użytkownika ( git
). W folderze /home/git
utworzyłem katalog .ssh/
i authorized_keys
plik.
Ale kiedy umieszczam klucz publiczny SSH w authorized_keys
pliku, serwer nadal pyta mnie o hasło.
Co zrobiłem źle?
Odpowiedzi:
Po stronie serwera demon ssh zaloguje błędy
/var/log/auth.log
, więc sprawdź ten plik, aby zobaczyć, co jest zgłaszane.Od strony klienta podczas nawiązywania połączenia możesz dodać
-v
flagę (lub-vv
lub-vvv
), aby zwiększyć poziom szczegółowości. W ten sposób możesz zidentyfikować swój problem.Oto inne rzeczy do sprawdzenia.
/home/git/.ssh/authorized_keys
jest własnościągit
./home/git/.ssh/authorized_keys
ma tryb 600 (-rw-------
).Sprawdź także
/etc/ssh/sshd_config
plik.PubkeyAuthentication
powinien być ustawiony nayes
AuthorizedKeysFile
dyrektywa, która określa ścieżkę, w której powinny znajdować się autoryzowane klucze. Upewnij się, że jest to komentarz lub domyślnie%h/.ssh/authorized_keys
.źródło
/var/log/auth.log
pliku? Czy istnieje sposób, aby to włączyć?sudo service ssh restart
Upewnij się także, że katalog domowy użytkownika (w twoim przypadku / home / git) jest zapisywany tylko przez Ciebie. Miałem ten problem raz, ponieważ mój katalog domowy można było zapisać w grupie. /var/log/auth.log powiedział w nim: „Odmowa uwierzytelnienia: złe własności lub tryby dla katalogu / home / chuck”. (ma to na celu upewnienie się, że nie używa pliku autoryzowanych_kluczy, z którymi bawi się ktoś inny niż ty!)
źródło
Istnieją różne sposoby rozwiązania tego problemu: możesz skonfigurować
sshd
(po stronie serwera) lubssh
(po stronie klienta), aby nie korzystał z uwierzytelniania za pomocą hasła. Wyłączenie uwierzytelniania hasła na serwerze sprawia, że serwer jest bezpieczniejszy, ale będziesz miał kłopoty, jeśli zgubisz klucz.Aby
ssh
ustawić (po stronie klienta) za pomocą uwierzytelniania klucza publicznego, dodaj kilka opcji dossh
polecenia:Jeśli to zadziała, możesz ustawić tę
PasswordAuthentication=no
opcję na stałe w pliku konfiguracyjnym klienta ssh/etc/ssh/ssh_config
dla całego systemu lub~/.ssh/config
dla konkretnego użytkownika (szczegółowe informacje, patrzman ssh_config
).źródło
/etc/ssh/ssh_config
) w systemach Debian / Ubuntu już preferująPubkeyAuthentication
i wypróbuj je najpierw, jak zobaczysz podczas wywoływaniassh
w trybie pełnym.Czy używasz ~ / .ssh / config na swoim komputerze lokalnym? Wystąpił ten problem, gdy używam dyrektywy IdentityFile w pliku konfiguracyjnym i wskazuję klucz publiczny. Na przykład:
źródło
Jeśli folder domowy jest zaszyfrowany,
authorized_keys
plik nie może być odczytany przed zalogowaniem. Musisz przenieść go poza dom.Tutaj wyjaśniono i jak to zrobić: https://help.ubuntu.com/community/SSH/OpenSSH/Keys#Trou Rozwiązywanie problemów
źródło
Inną sprawą do sprawdzenia jest to, czy w twoim kluczu publicznym są dodatkowe zwroty karetki. Postępowałem zgodnie z powyższą radą, aby przejrzeć plik /var/log/auth.log i zobaczyłem błąd podczas czytania klucza. Klucz miał około dwóch linii zamiast czterech. W kluczu były dodatkowe zwroty karetki.
Korzystając z edytora vi, użyj shift-j, aby połączyć linie i usunąć dodatkowe spacje w ciągu klucza.
źródło
sshd_config
. Uderzyłem głową o ścianę przez pół godziny. To był mój błąd! W jakiś sposób przyzwyczaiłem się do kończenia wszystkich plików, które edytuję ręcznie, dodatkowym łamaniem wiersza. Nawet z jednym kluczem i zwrotem karetki na końcu wystarczy zepsuć autoryzację.Jeśli masz wiele kluczy prywatnych, użyj przełącznika -v w poleceniu połączenia ssh, aby sprawdzić, czy inne klucze podstawowe nie są używane do próby nawiązania połączenia. Jeśli nie są, powiedz klientowi ssh, aby używał ich za pomocą następującego polecenia:
źródło
Możesz także dodać swój klucz do agenta SSH:
źródło
Możliwe, że dzwonisz
sudo git clone gituser@domain:repo.git
gdzie klawisz użytkowników root ssh nie została dodana do
authorized_keys
zgituser
źródło
Na komputerze z systemem Ubuntu 18.04.02 LTS propozycja ustawienia uprawnień
~/.ssh
na 600 nie działała dla mnie. Musiałem ustawić uprawnienia na 700, a potem wszystko poszło dobrze.źródło
Miałem poprawne uprawnienia do katalogu .ssh / i plik autoryzowanych_kluczy, ale napotkałem ten problem z monitem o hasło z powodu innego, spowodowanego przez siebie problemu.
Użyłem podświetlenia opartego na myszy i skopiuj / wklej, aby skopiować informacje z mojego lokalnego pliku id_rsa.pub do pliku uprawnionego na serwerze. Pomyślnie skopiowano dane jako pojedynczą linię, ale tam, gdzie niepożądane spacje na końcu widocznych linii były trudne do zauważenia podczas edycji pliku za pomocą vi. Po usunięciu tych niechcianych spacji mogłem ssh w porządku.
źródło
Tak więc stało się dla mnie, że mam 2 maszyny wirtualne, do których mam dostęp z mojego komputera lokalnego (2 klucze id_rsa.pub i id_rsa2.pub). Zrozumiałem, że moje połączenie ssh domyślnie używa id_rsa.pub dla każdego połączenia ssh uż[email protected]. Rozwiązałem problem, dodając plik konfiguracyjny i określając tożsamość, która ma być używana dla każdego hosta, w następujący sposób:
źródło