Dlaczego automatyczne logowanie przez ssh z uprawnionymi kluczami nie działa?

12

Utworzyłem prywatną / publiczną parę kluczy dsa. Włożyłem klucz publiczny na serwer

~/.ssh/authorized_keys

Wszystko jest skonfigurowane jak mój drugi serwer, ale wygląda na to, że serwer po prostu ignoruje moje wysiłki.

Magnar
źródło
Sprawdź /etc/ssh/ssh_configi /etc/ssh/sshd_configsprawdź, czy nic, co chcesz, jest wyłączone.
Kristopher Johnson
Będziesz także chciał sprawdzić sshd_config.
Vagnerr
Dzięki. Zaktualizowałem odpowiedź (która pierwotnie wspomniała tylko o ssh_config).
Kristopher Johnson
Wszystkie powyższe dyskusje są idealne, jeśli używasz ssh w stylu openssh. Jeśli używasz ssh2, masz zupełnie dziwny sposób zarządzania kluczami. W tym artykule omówiono, jak i co. burnz.wordpress.com/2007/12/14/…
Chris
1
Zazwyczaj sprawdzanie /var/log/auth.logsystemów Debian lub /var/log/secureRedHat powinno dać ci jasną radę na temat tego, co jest źle skonfigurowane (zwykle problemy z uprawnieniami)
Giovanni Toraldo

Odpowiedzi:

15

Chociaż Twój problem mógł już zostać rozwiązany przez inne odpowiedzi, zablokowałem się z wystarczającej liczby maszyn, aby nie sprawdzać poprawności zmian sshd_config przed wypisaniem się, dlatego opracowałem poniższy proces, który może być przydatny do przyszłego debugowania zmian konfiguracji sshd:

NIE WOLNO ODŁĄCZAĆ aktywnego połączenia ssh, dopóki PO teście nie zweryfikuje, że zachowanie jest zgodne z oczekiwaniami.

za. sprawdź, co Twoim zdaniem powinien robić sshd

b. sprawdź poprawność konfiguracji za pomocą „-t”

do. uruchom pełną testową wersję serwera, na którym możesz monitorować na żywo

re. rozpocznij pełne „testowe” połączenie klienta, które możesz monitorować na żywo


za. sprawdź, co Twoim zdaniem powinien robić sshd

Przejrzyj plik konfiguracyjny sshd bez całego komentarza za pomocą czegoś takiego jak poniżej (zakładając, że sshd_config jest poprawnym plikiem w / etc / ssh)

$ grep -v "^ #" / etc / ssh / sshd_config | grep -v "^ $"

To po prostu wszystko usuwa, więc weryfikujemy to, co naszym zdaniem zmieniamy (niekoniecznie to, czy jest poprawne, czy nie).

b. sprawdź poprawność konfiguracji za pomocą „-t”

Ze strony podręcznika sshd używam,

-t Tryb testowy. Sprawdź tylko poprawność pliku konfiguracyjnego i poczytaj klucze. Jest to przydatne do niezawodnej aktualizacji sshd, ponieważ opcje konfiguracji mogą ulec zmianie.

Inne zmiany mogą mieć bardziej subtelne okoliczności. Na przykład nie wyłączaj uwierzytelniania za pomocą hasła, dopóki nie upewnisz się, że uwierzytelnianie za pomocą klucza publicznego działa poprawnie.

do. uruchom pełną testową wersję serwera, na którym możesz monitorować na żywo

$ sudo / usr / sbin / sshd -ddd -p 9999

Dzięki temu twoja istniejąca sesja robocza jest aktywna, ale daje ci kolejną instancję sshd do zweryfikowania nowych zmian konfiguracji. Dysk SSHD działa teraz na pierwszym planie do portu zdefiniowanego przez użytkownika (w naszym przykładzie 9999) i przekazuje wiele głośnych informacji debugowania, które można śledzić w / var / log / authlog (lub ewentualnie /var/log/auth.log w systemie operacyjnym).

re. rozpocznij pełne „testowe” połączenie klienta, które możesz monitorować na żywo

Uruchom połączenie klienta ssh w trybie pełnym, aby wyświetlić na ekranie więcej informacji, które mogą pomóc w lepszym debugowaniu błędu.

$ ssh -vvv -p 9999 nazwa-serwera

Powinieneś teraz mieć wystarczającą ilość informacji w plikach dziennika serwera lub na ekranie połączenia klienta, aby odizolować problem.

Rozwiązanie zasadniczo sprowadza się do uprawnień do plików (jak pokazują Magnar i setatakahashi)

Powodzenia

samt
źródło
Myślę, że powinieneś również sprawdzić plik ssh_config po stronie klienta, aby upewnić się, że działa zgodnie z oczekiwaniami. Użyj czegoś takiego jak poniżej, aby wymazać komentarze:> grep -v "^ #" / etc / ssh / ssh_config | grep -v "^ $"
samt
Cóż, konfigurację ssh klienta można naprawić w dowolnym momencie, jest to serwer, z którego zostaniesz zablokowany, jeśli źle skonfigurujesz.
Soviero
33

Serwer zignoruje Twój plik autoryzowanych_kluczy, jeśli właściwości właściciela są nieprawidłowe. Zmiana tego na to naprawia:

chmod 0700 ~/.ssh
chmod 0600 ~/.ssh/authorized_keys
Magnar
źródło
6
ssh -vvv -l nazwa_użytkownika server.domain powie, jeśli wysyłanie prawidłowy klucz
Dave Cheney
Czasami widziałem, jak sshd narzeka na złe uprawnienia do katalogu domowego - więc dodawałem „chmod o-rwx ~” (lub przynajmniej „chmod ow ~”) do listy, tak jak robił to setatakahashi. Zwykle staje się to oczywiste, gdy plik dziennika jest monitorowany - komunikaty o błędach, które tam widziałem, zawsze wskazywały właściwy kierunek.
Olaf
Ta odpowiedź wydaje się najbardziej prawdopodobna, ale komentarz Dave'a Cheneya jest jedynym sposobem, aby zobaczyć, co się naprawdę dzieje. Sprawdź także dzienniki serwera.
dwc
To był mój problem. Godziłem się z tym godzinami. Dzięki wielkie!
Sam Soffes,
1
To załatwiło sprawę, ale moje dotychczasowe uprawnienia były 0775i 0644odpowiednio. Dlaczego pomogło ograniczenie uprawnień? Czy jest to gdzieś skonfigurowane zabezpieczenie?
Dziekan
11

$ chmod 700 ~

$ chmod 700 ~ / .ssh

$ chmod 600 ~ / .ssh / Author_keys

Sprawdź te atrybuty w / etc / ssh / sshd_config

$ sudo grep PubkeyAuthentication / etc / ssh / sshd_config

$ sudo grep Protocol / etc / ssh / sshd_config

setatakahashi
źródło
2
Znakomity punkt na temat ~, musisz upewnić się, że nikt inny niż ty nie może pisać do twojego katalogu domowego, w przeciwnym razie mogliby zmienić nazwę twojego katalogu ~ / .ssh
Dave Cheney
ostatni chmod powinien być: $ chmod 600 ~/.ssh/authorized_keysnie$ chmod 600 ~/.sHh/authorized_keys
SooDesuNe
3
jakie powinny być wartości atrybutów ?
Michael
0

Kolejna ważna pułapka ..

Jeśli twój katalog domowy jest zaszyfrowany, sshd nie będzie miał dostępu do ~ / .ssh / uprawnionych_ kluczy.

Zobacz odpowiedź

ApriOri
źródło