Klucz publiczny SSH - brak obsługiwanych metod uwierzytelniania (serwer wysłał klucz publiczny)

80

Mam konfigurację serwera 12.10 na maszynie wirtualnej z ustawionym mostkiem sieci (w zasadzie będzie to komputer podłączony do mojego przełącznika).

Zainstalowałem opensshd przez apt-geti byłem w stanie połączyć się z serwerem używając putty z moją nazwą użytkownika i hasłem.

Następnie postanowiłem spróbować użyć uwierzytelniania za pomocą klucza publicznego / prywatnego. Zrobiłem następujące:

  1. Wygenerowano klucze za pomocą PuttyGen.
  2. Przeniesiono klucz publiczny do /etc/ssh/myusername/authorized_keys(korzystam z zaszyfrowanych katalogów domowych).
  3. Skonfiguruj sshd_configtak:

    PubkeyAuthentication yes
    AuthorizedKeysFile /etc/ssh/%u/authorized_keys
    StrictModes no
    PasswordAuthentication no
    UsePAM yes
    

Kiedy łączę się przy użyciu putty lub WinSCP, pojawia się komunikat o błędzie Brak dostępnych obsługiwanych metod uwierzytelniania (serwer wysłał klucz publiczny).

Jeśli działam sshdw trybie debugowania, widzę:

PAM: initializing for "username"
PAM: setting PAM_RHOST to "192.168.1.7"
PAM: setting PAM_TTY to "ssh"
userauth-request for user username service ssh-connection method publickey [preauth]
attempt 1 failures 0 [preauth]
test whether pkalg/pkblob are acceptable [preauth[
Checking blacklist file /usr/share/ssh/blacklist.RSA-1023
Checking blacklist file /etc/ssh/blacklist.RSA-1023
temporarily_use_uid: 1000/1000 (e=0/0)
trying public key file /etc/ssh/username/authorized_keys
fd4 clearing O_NONBLOCK
restore_uid: 0/0
Failed publickey for username from 192.168.1.7 port 14343 ssh2
Received disconnect from 192.168.1.7: 14: No supported authentication methods available [preauth]
do_cleanup [preauth]
monitor_read_log: child log fd closed
do_cleanup
PAM: cleanup

Dlaczego tak się dzieje i jak mogę to naprawić?

F21
źródło
W moim przypadku mam dwie instancje AWS. Jedna z nich działa bezbłędnie, druga działa podczas łączenia przez Intellij Idea, ale nie od Putty, ale działała na początku. Więc w moim przypadku musi to być coś z
kitem

Odpowiedzi:

70

Problem rozwiązany:

Wygląda na to, że wystąpił problem z moim plikiem klucza publicznego. PuttyGen utworzy plik klucza publicznego, który wygląda następująco:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20121022"
AAAAB3NzaC1yc2EAAAABJQAAAIEAhGF6GIuMY8FJ1+CNApnSY1N2YSlkYz72Yvwu
a6N1nFpBklz1+dsIMg4rcTLcF34M/tW5Yz+NUDAw2AEbxQ32FPgw7sAOIXktkYOH
tr7mmimiTjkoSCrJh1kqalPSpi8rglT/Bp67Ql2SZwvUFfMzHISryR0EZC4rXP/u
vObrJe8=
---- END SSH2 PUBLIC KEY ----

Jednak to nie zadziała, więc musisz otworzyć klucz w PuttyGen, a następnie skopiować go stamtąd (powoduje to, że klucz ma odpowiedni format i 1 linię):

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAhGF6GIuMY8FJ1+CNApnSY1N2YSlkYz72Yvwua6N1nFpBklz1+dsIMg4rcTLcF34M/tW5Yz+NUDAw2AEbxQ32FPgw7sAOIXktkYOHtr7mmimiTjkoSCrJh1kqalPSpi8rglT/Bp67Ql2SZwvUFfMzHISryR0EZC4rXP/uvObrJe8= rsa-key-20121022

Wklej to do, authorized_keysto powinno działać.

F21
źródło
1
Otworzyłem authorized_keysw vi i usunąłem wszystkie zerwania linii i zadziałało.
Łukasza
1
gdzie znajduje się plik klucza publicznego? używam tylko szpachli.
Syler
1
Zrobiłem wszystkie powyższe czynności, ale serwer wciąż wysyła Brak obsługiwanych metod uwierzytelniania (serwer wysłał klucz publiczny)
Al-Alamin
Skąd wiedziałeś, że to nie zadziała / gdzie znalazłeś oczekiwany format?
Michael
Tam, gdzie potrzebuję wkleić dokładnie, gdy mówisz „Wklej to w uprawnione klucze, to powinno działać”. @ F21
Mahender Reddy Yasa
19
  1. Edytuj /etc/ssh/sshd_configplik.
  2. Zmień PasswordAuthenticationi ChallengeResponseAuthenticationna yes.

3a. Uruchom ponownie ssh /etc/init.d/ssh restart.
LUB
3b. lepiej użyjservice sshd restart

myśliwy
źródło
w rzeczy
samej
To działa dla mnie!
Asinox,
8
Cały Celem uwierzytelniania za pośrednictwem pliku klucza jest unikać uwierzytelniania hasłem, więc faktycznie należy ustawić PasswordAuthenticationsię no.
Pere,
To jedyna odpowiedź, która mi pomogła. Nie potrzebowałem uwierzytelniania klucza publicznego / prywatnego, ale otrzymywałem ten dziwny komunikat.
Serge Rogatch
Dzięki ChallengeResponseAuthentication, rozwiązało to problem na Debianie 10.0
realtebo
10

Tylko wskazówka, mam nadzieję, że może pomóc komuś innemu z bólami głowy, które miałem. F21 ma rację, że musisz skopiować klucz z okna PuTTYGen zamiast zapisywać plik, ale po skopiowaniu sposób wklejenia może mieć znaczący wpływ na to, czy klucz zadziała, czy nie. Niektórzy redaktorzy zmieniają tekst podczas wklejania lub robią coś z nowymi wierszami lub coś, co powoduje, że plik autoryzowanych_kluczy jest nieprawidłowy.

To, co według mnie jest najmniej prawdopodobne, do złamania, to echo pełnego łańcucha i przekierowanie wyjścia do pliku. Kliknięcie prawym przyciskiem myszy w PuTTY, aby wkleić ciąg klucza do wiersza poleceń, działa w następujący sposób (w powyższym przykładzie):

echo [right-click-to-paste-here] > /etc/ssh/username/authorized_keys

Skończysz z tym:

echo ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAhGF6GIuMY8FJ1+CNApnSY1N2YSlkYz72Yvwua6N1nFpBklz1+dsIMg4rcTLcF34M/tW5Yz+NUDAw2AEbxQ32FPgw7sAOIXktkYOHtr7mmimiTjkoSCrJh1kqalPSpi8rglT/Bp67Ql2SZwvUFfMzHISryR0EZC4rXP/uvObrJe8= rsa-key-20121022 > /etc/ssh/username/authorized_keys

Kolejną zaletą tej metody jest to, że możesz dodać wiele kluczy w ten sposób, używając >>, aby dodać zamiast>, aby zastąpić, np .:

echo ssh-rsa AAAAB3<...snip...>rJe8= rsa-key-20121022 >> /etc/ssh/username

Mam nadzieję, że komuś pomoże.

Dave
źródło
To nie działa na klucze 4096 bitów ... Myślę, że przekracza limit
terminów
1
Może to później być dobrym pomysłem, aby usunąć to z historii bash.
Jason Powers Murray
@JasonPowersMurray: to klucz publiczny. System kryptografii klucza publicznego został zaprojektowany w taki sposób, aby był bezpieczny, gdy klucz zostanie opublikowany, więc można logować klucze publiczne w historii bash i gdzie indziej.
David Cary
9

Używaliśmy już odpowiedniego rodzaju klucza (ppk zamiast pem) ..

W naszym przypadku wystąpił problem z uprawnieniami do plików dla kluczy autoryzowanych w folderze użytkownika serwera. To musi być -rw-r - r-- ... To było -rw-rw-r--

ssh jest bardzo wybredny jeśli chodzi o perms plików.

Sharad
źródło
Dzięki za wskazanie mi właściwego kierunku. W naszym przypadku zarówno właściciel, jak i uprawnienia były błędne.
Zsolti,
jak zmienić uprawnienia do plików, ponieważ nie jesteśmy w stanie uzyskać dostępu przez ssh? w jakikolwiek inny sposób?
od
1
Mój był także problemem własności, pracy grupowej i uprawnień. Jak pokazano tutaj ( stackoverflow.com/a/36808935/384670 ), uprawnienia, których musiałem użyć, to 600 dla pliku i 700 dla katalogu. Zmieniłem również właściciela i grupę na tego użytkownika innego niż root.
M Katz
5

ROZWIĄZANY:

  1. Musisz pobrać puttyGEN i wygenerować klucz publiczny i prywatny.
  2. Przypisałem hasło do mojego klucza prywatnego.
  3. następnie skonfiguruj klucz prywatny w kitu. Kit-> SSH-> Auth-> Przeglądaj do swojej prywatnej.
  4. Upewnij się, że masz tę samą ścieżkę do klucza prywatnego i publicznego.
  5. Musisz skonfigurować klucz publiczny na serwerze. (W moim przypadku rozmawiałem z facetem od serwera i zapytałem, czy mógłby dodać mój klucz publiczny do serwera). Potrzebujesz klucza publicznego po drugiej stronie (serwerze) połączenia.
Matt.sinner
źródło
2
„Upewnij się, że masz tę samą ścieżkę dla klucza prywatnego i publicznego”. To nie ma z tym nic wspólnego. Nie musisz rezydować w kluczu publicznym obok prywatnego.
użytkownik3790897
5

W moim przypadku przyczyną było to, że plik klucza prywatnego (.ppk) został usunięty w agencie uwierzytelniającym Putty, tj. Pageant. Właśnie zaktualizowałem go do Pageant, a potem połączenie działało idealnie.

Marko H.
źródło