ssh nie pozwala już na uwierzytelnianie za pomocą klucza publicznego

22

Moja maszyna niedawno przestała akceptować przychodzące uwierzytelnianie za pomocą klucza publicznego. Mam pulpit Ubuntu 11.04, na który ssh z komputera z systemem Windows. Używam szpachli z korowodem. Jestem w stanie połączyć się, ale tylko z interaktywnym uwierzytelnianiem hasła, nie z moim kluczem rsa, który mam skonfigurowany.

Już sprawdziłem, czy klucz jest wymieniony w ~ / .ssh / uprawnione_ klucze. Jak to naprawić i co sprawdzić?

Andrew Redd
źródło
2
Najpierw należy sprawdzić, że wszystkie trzy ~, ~/.sshi ~/.ssh/authorized_keysto tylko przez ciebie zapisu (w szczególności zezwolenia zapisu żadna grupa). Poszukaj /var/log/auth.logwpisów w dzienniku utworzonych podczas prób logowania. Skopiuj i wklej je do swojego pytania (edytuj nazwy dla prywatności, jeśli chcesz). Sprawdź także, czy problem występuje wyłącznie po stronie serwera: skopiuj klucz prywatny na maszynę z systemem Linux (musisz przekonwertować plik klucza prywatnego PuTTY na format OpenSSH) i sprawdź, czy ssh localhostdziała.
Gilles „SO- przestań być zły”
z jakiegoś powodu mój katalog domowy był zapisywalny. To naprawiło. Postaw to jako odpowiedź, abym mógł go zaakceptować.
Andrew Redd,
stackoverflow.com/questions/6377009/...
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Odpowiedzi:

28

Jeśli uwierzytelnianie za pomocą klucza publicznego nie działa: upewnij się, że po stronie serwera katalog domowy ( ~), ~/.sshkatalog i ~/.ssh/authorized_keysplik są zapisywalne tylko przez ich właściciela . W szczególności żadna z nich nie może być zapisywalna przez grupę (nawet jeśli użytkownik jest sam w grupie). chmod 755lub chmod 700jest w porządku, chmod 770nie jest.

Co sprawdzić, gdy coś jest nie tak:

  • Uruchom, ssh -vvvaby zobaczyć wiele wyników debugowania. Jeśli opublikujesz pytanie z pytaniem, dlaczego nie możesz połączyć się z ssh, dołącz to wyjście (możesz chcieć anonimizować nazwy hosta i użytkownika).
  • Jeśli możesz, sprawdź, czy serwer się zalogował /var/log/auth.log.
  • Jeśli uwierzytelnianie za pomocą klucza publicznego nie działa, sprawdź ponownie uprawnienia, szczególnie bit grupy (patrz wyżej).
Gilles „SO- przestań być zły”
źródło
(z wiki tagu U&L , skopiowane do AU )
Gilles „SO- przestań być zły”
1
Niezła odpowiedź! Zapomniałem mojego homedir: o
RobAu
Jeśli używasz najnowszej wersji ssh (lub sshd), klucze DSA nie są już domyślnie obsługiwane z powodu problemów z bezpieczeństwem. Jedyną prawdziwą poprawką jest aktualizacja do RSA lub lepszych kluczy.
Mikko Rantalainen
Zmieniłem uprawnienia do mojego folderu domowego i co? Zostałem zablokowany z SSH! Zmieniłem klucze ssh, nie, serwer nadal odmawia połączenia! Byłem szalony, próbując znaleźć rozwiązanie, a dzięki twojej odpowiedzi chmod 700 do mojego folderu domowego ssh zaczął działać !!!!!!! Dzięki! Jeśli połączenie terminalu zostało przerwane podczas próby znalezienia rozwiązania, zostałbym całkowicie zablokowany na serwerze. Uważaj więc, aby nie grać z uprawnieniami do folderu domowego! (Właśnie zmieniłem uprawnienia do folderu domowego, nie do folderu .ssh, ale nadal zablokowałem SSH)
Tarik
9

Natknąłem się na to samo i w końcu zorientowałem się, że to dlatego, że zaszyfrowałem mój katalog domowy. SSH nie może odczytać pliku autoryzowanych kluczy, dopóki się nie zalogujesz, więc w zasadzie wymusza najpierw uwierzytelnienie za pomocą hasła. Zobacz sekcję o zaszyfrowanym katalogu domowym pod następującym linkiem:

https://help.ubuntu.com/community/SSH/OpenSSH/Keys#Encrypted_Home_Directory

Willie Wheeler
źródło
5

Jeśli sprawdzisz uprawnienia do katalogów i pojawi się „.” zaraz po nich, możesz mieć włączony selinux, który zepsuje wymianę kluczy i domyślnie manualna identyfikacja hasła.

Możesz wyłączyć SELinux w celu rozwiązywania problemów, postępując zgodnie z instrukcjami tutaj: http://www.centos.org/docs/5/html/5.1/Deployment_Guide/sec-sel-enable-disable-enforcement.html lub po prostu edytuj plik / etc / selinux / config i zmień go z „wymuszania” na „wyłączony”.

Mam nadzieję że to pomoże.

tweekd
źródło
Miałem włączoną funkcję selinux, ale wyłączenie nie wydawało się to naprawić. Jaka była dla mnie sztuczka chmod 600 ~/.ssh/authorized_keys- plik można było zapisać w grupie. (via pyrosoft.co.uk/blog/2013/01/12/… )
David Carboni,
To mi pomogło! Dziękuję Ci!
907th
Powinieneś także mieć możliwość uzyskania uwierzytelnienia SSH podczas pracy z SELinux, ustawiając odpowiednie konteksty SELinux. Przywrócenie kontekstów skonfigurowanych przez system w katalogu domowym ( restorecon ~ -R) jest dobrym punktem wyjścia.
Josh Kelley,
4

Upewnię się, że masz poprawne ustawienia w / etc / ssh / sshd_config.

Aby wymusić użycie tylko PKI i nie zezwalać na hasła, znajdź wiersz

#PasswordAuthentication yes 

w pliku usuń komentarz i ustaw go na

PasswordAuthenticate no

Przeczytałbym również bilans ustawień, aby upewnić się, że mają one sens. W szczególności postaraj się upewnić, że używasz kluczy RSA, ponieważ wiadomo, że DSA jest zagrożone.

cmdematos
źródło
11
Wyjaśniasz, jak wyłączyć uwierzytelnianie hasła. Nie pomoże to w działaniu uwierzytelniania za pomocą klucza publicznego (klucz publiczny jest najpierw wypróbowywany). Andrew: nie wyłączaj uwierzytelniania hasła, dopóki nie upewnisz się, że uwierzytelnianie za pomocą klucza publicznego działa!
Gilles „SO- przestań być zły”
2

Jedną z możliwych przyczyn tego problemu jest to, że masz klucze DSA, ale teraz SSH (najwyraźniej) domyślnie wymaga kluczy RSA. Mam problem podczas aktualizacji do 16.04. Możesz zobaczyć więcej tutaj, ale krótka odpowiedź jest następująca ~/.ssh/config:

PubkeyAcceptedKeyTypes ssh-dss
DeegC
źródło
1

Rozwiązałem ten problem, usuwając komentarz „PasswordAuthentication yes” w / etc / ssh / sshd_config.

Ben Ernest
źródło
1

Z powodu potrzeby rozwiązywania problemów z komunikacją między dwoma różnymi komputerami, miałem dwa klucze prywatne ~/.sshpo stronie klienta.

Zamiast konfigurować każdy host serwera z odpowiednim kluczem prywatnym, ~/.ssh/identitytak jak powinienem to zrobić, miałem skonfigurowany dla wszystkich hostów klucz pomocniczy (aw tym przypadku nieprawidłowy):

Host *
IdentityFile ~/.ssh/identity_b

Korekta ~/.ssh/identityrozwiązała problem:

Host a
IdentityFile ~/.ssh/identity_a
Host b
IdentityFile ~/.ssh/identity_b
Uli Klumpp
źródło
0

Po prostu miałem ten sam problem, ale zmiana uprawnień chmodnie pomogła, ponieważ okazało się, że nie mam prawa własności do ~/.ssh/authorized_keyspliku. Możesz zmienić własność .sshkatalogu za pomocą:

sudo chown -R "$USER" ~/.ssh
Nacięcie
źródło
-1

Jakoś to działało dla mnie:

root @ kaiser: ~ # vim / etc / ssh / sshd_config

Zmień tę linię z tak na nie 28 StrictModes nie

Spróbuj ponownie

sysadmin @ suselinux1: ~> con sysadmin kaiser Witamy w Ubuntu 12.04.1 LTS (GNU / Linux 3.2.0-25-generic i686)

Ostatnie logowanie: pt. 9 lis 15:40:11 2012 od 10.1.3.25 sysadmin @ kaiser: ~ $ data vie lis 9 17:53:11 CST 2012 sysadmin @ kaiser: ~ $

theunbekanntshadow
źródło
3
Robienie czegoś bez wiedzy o tym, co robi i dlaczego działa, może być akceptowalne, ale sugerowanie tego samego jest złe, a mówiąc uczciwie, gorsze, jeśli dotyczy systemu bezpieczeństwa.
Mahesh,
2
Zgoda. niech to będzie zachęta do tworzenia lepszych sshddokumentów, które nie należą do kategorii „miłej lektury w sobotę”
code_monk