Zbyt wiele błędów uwierzytelnienia dla * nazwy użytkownika *

255

Mam konto hostgator z włączonym dostępem ssh. Podczas próby przesłania wygenerowanego pliku klucza .pub za pomocą tego polecenia:

rsync -av -e "ssh -p2222" /home/user/.ssh/key.pub [email protected]:.ssh/authorized_keys

Ciągle otrzymuję:

Otrzymano rozłączenie z 111.222.33.44: 2: Zbyt wiele błędów uwierzytelnienia dla nazwy użytkownika
rsync: połączenie niespodziewanie zamknięte (do tej pory odebrano 0 bajtów) [nadawca]
błąd rsync: niewyjaśniony błąd (kod 255) w io.c (601) [sender = 3.0.7]

Wcześniej bawiłem się ssh, dopóki nie dostałem awarii uwierzytelnienia. Ale teraz wydaje się, że licznik awarii uwierzytelniania nie resetuje się (czekał już ponad 12 godzin, wsparcie techniczne „zakłada”, że resetuje się po 30 minutach do 1 godziny, a inny facet powiedział mi „resetuje się za każdym razem, gdy próbujesz się zalogować nazwa użytkownika ”, jeesh).

To doprowadza mnie do szału. Miałem to nawet skonfigurowane na niestandardowym serwerze Slicehost i miałem mniej problemów niż z tymi facetami.

Jakieś wskazówki? Być może jest to coś po stronie klienta, a nie po stronie serwera.

Gabriel A. Zorrilla
źródło
W moim przypadku wystąpił błąd w generowaniu klucza. Wygenerowałem klucz i nie wspomniałem o źródłowym adresie i użyłem nazwy użytkownika na końcu klucza.
reporter

Odpowiedzi:

415

Jest to zwykle spowodowane przypadkowym zaoferowaniem wielu kluczy ssh na serwerze. Serwer odrzuci dowolny klucz po zaoferowaniu zbyt wielu kluczy.

Możesz to zobaczyć, dodając -vflagę do sshpolecenia, aby uzyskać pełne wyjście. Zobaczysz, że oferuje się kilka kluczy, dopóki serwer nie odrzuci połączenia, mówiąc: „Zbyt wiele niepowodzeń uwierzytelniania dla [użytkownika]” . Bez trybu pełnego pojawi się niejednoznaczny komunikat „Resetowanie połączenia przez użytkownika” .

Aby zapobiec oferowaniu nieistotnych kluczy, musisz jawnie określić to w każdej pozycji hosta w ~/.ssh/configpliku (na komputerze klienta), dodając w ten IdentitiesOnlysposób:

Host www.somehost.com
  IdentityFile ~/.ssh/key_for_somehost_rsa
  IdentitiesOnly yes
  Port 22

Jeśli używasz ssh-agent, pomaga uruchomić, ssh-add -Daby wyczyścić tożsamości.

Jeśli nie używasz żadnej konfiguracji hostów ssh, musisz jawnie określić poprawny klucz w sshpoleceniu w następujący sposób:

ssh -i some_id_rsa -o 'IdentitiesOnly yes' them@there:/path/

Uwaga: parametr „IdentitiesOnly yes” musiał znajdować się między cudzysłowami.

lub

ssh -i some_id_rsa -o IdentitiesOnly=yes them@there:/path/
John T.
źródło
5
nie jest dla mnie jasne, gdzie umieścić tę linię. Na serwerze, na którym próbuję się zalogować, .ssh / config ma informacje tylko dla innych serwerów. Czy masz na myśli, że powinien on zostać zapisany w pliku .ssh / config na komputerze, z którego próbuję ssh? Jeśli tak, to nie jest jasne, ponieważ twoja odpowiedź brzmi „po ponownym zalogowaniu ...”
David LeBauer,
2
Muszę umieścić opcję w podwójnych cudzysłowach, tak jak poniżej:ssh -i some_id_rsa -o "IdentitiesOnly yes" them@there:/path/
kn
1
Użytkownicy systemu Windows korzystający z PAGENT (Putty Agent), sprawdź, czy masz tylko klucze, które musisz załadować. Natrafiłem na ten problem po przypadkowym załadowaniu WSZYSTKICH moich kluczy prywatnych.
Chris Rasco,
2
Pozostaje pytanie: dlaczego ssh„oferuje wiele kluczy” (cokolwiek poniżej ~/.ssh), nawet jeśli reguła dla hosta ma jawne IdentityFile /path/to/private_key_fileustawienie. Czy ten wyraźnie określony klucz nie powinien być (przynajmniej) oferowany jako pierwszy? Czy to nie jest błąd / błąd w kliencie openssh?
arielf
2
Ale czy nie powinien używać klucza określonego w IdentityFileopcji? Na przykład bez tej IdentitiesOnlyopcji próbuje użyć mojego githubklucza, gdy próbuję ssh gitlab.com. To nie ma sensu.
Iulian Onofrei
188

Znalazłem łatwiejszy sposób na zrobienie tego (jeśli używasz uwierzytelniania za pomocą hasła):

ssh -o PubkeyAuthentication=no [email protected]

Wymusza to uwierzytelnianie bez klucza. Byłem w stanie zalogować się natychmiast.

Odniesienie

Ben West
źródło
3
+1, chciałbym dać ci więcej. Raspberry Pi to jedyne urządzenie, do którego ssh bez klucza publicznego.
Pojawiało
1
I używać tego z rsync:rsync -av -e 'ssh -o PubkeyAuthentication=no' '[email protected]:~/remote_file' 'local_file'
Ciro Santilli 事件 改造 中心 法轮功 六四 事件
1
Możesz także utworzyć Alias, aby przyspieszyć uwierzytelnianie hasła. alias sshp = 'ssh -o PubkeyAuthentication = no'
dhempler
26

Otrzymywałem również ten błąd i stwierdziłem, że to się dzieje, ponieważ serwer skonfigurowano tak, aby akceptował maksymalnie 6 prób:

/etc/ssh/sshd_config
...
...
#MaxAuthTries 6

Oprócz ustawienia IdentitiesOnly yesw ~/.ssh/configpliku masz kilka innych opcji.

  1. Zwiększ MaxAuthTries(na serwerze ssh)
  2. usuń niektóre pary kluczy, które masz w swoim ~/.ssh/katalogu i uruchomssh-add -D
  3. jawnie połącz klucz z danym hostem w swoim ~/.ssh/configpliku

Tak jak:

host foo
hostname foo.example.com
IdentityFile /home/YOU/.ssh/foo
  1. Prawdopodobnie nie jest to dobry sposób, aby to zrobić, ponieważ osłabia nieco twój serwer ssh, ponieważ akceptuje teraz więcej kluczy podczas danej próby połączenia. Pomyśl tutaj o wektorach ataku brutalnej siły.

  2. To dobry sposób, aby założyć, że masz klucze, które nie są potrzebne i mogą zostać trwale usunięte.

  3. Podejście do ustalania tożsamości jest prawdopodobnie preferowanym sposobem radzenia sobie z tym problemem!

slm
źródło
W ostatnim wierszu masz plik identyfikacyjny /home/YOU/.ssh/foo, ale powinien to być plik identyfikacyjny (nie f)
Nin
7

Dodałem do ~ / .ssh / config to:

Host *
IdentitiesOnly yes

Domyślnie włącza opcję IdentitiesOnly = yes. Jeśli będziesz musiał połączyć się z kluczem prywatnym, powinieneś podać go z opcją -i

Евгений Шаповалов
źródło
6

Jeśli pojawi się następujący błąd SSH:

$ Received disconnect from host: 2: Too many authentication failures for root

Może się to zdarzyć, jeśli masz (domyślnie w moim systemie) pięć lub więcej plików tożsamości DSA / RSA przechowywanych w katalogu .ssh i jeśli opcja „-i” nie jest podana w wierszu poleceń.

Klient ssh najpierw spróbuje się zalogować przy użyciu każdej tożsamości (klucza prywatnego), a następnie poprosi o uwierzytelnienie hasła. Jednak sshd porzuca połączenie po pięciu błędnych próbach logowania (znowu domyślne mogą się różnić).

Jeśli masz kilka kluczy prywatnych w swoim katalogu .ssh, możesz wyłączyć „Uwierzytelnianie klucza publicznego” w wierszu poleceń, używając opcjonalnego argumentu „-o”.

Na przykład:

$ ssh -o PubkeyAuthentication=no root@host
Will Verna
źródło
Właśnie to się ze mną działo! Bardzo dziękuję za wyjaśnienie;)
El Ninja Trepador
6

Jeśli masz hasło i chcesz po prostu użyć hasła, aby się zalogować, oto jak to zrobić.

Aby użyć TYLKO uwierzytelnienia hasłem i NIE używać klucza publicznego, a NIE używać nieco wprowadzającej w błąd „interaktywnej klawiatury” (która jest nadzbiorem zawierającym hasło), możesz to zrobić z wiersza poleceń:

ssh -o PreferredAuthentications=password [email protected]
Greg Rundlett
źródło
3

Po @David powiedz, po prostu dodaj to IdentitiesOnly yes do swojego .ssh / config, robi to samo cossh -o PubkeyAuthentication=no.

Po zalogowaniu usuń .ssh/authorized_keys. Teraz wróć do komputera lokalnego i wpisz następujące polecenie

cat ~/.ssh/id_rsa.pub | ssh -o PubkeyAuthentication=no user@IP_ADDR 'cat >> .ssh/authorized_keys'. To powinno ponownie włączyć twój ssh z kluczem publicznym

Alan Dong
źródło
2

Wiem, że to stary wątek, ale chciałem tylko dodać tutaj, że natrafiłem na ten sam komunikat o błędzie, ale było to spowodowane tym, że właściciel folderu .ssh jest rootem, a nie użytkownik, który używał klucza. Rozwiązałem problem, uruchamiając następujące polecenia:

sudo chown -R user:user /home/user/.ssh

Upewniłem się również, że uprawnienia są prawidłowe w folderze .ssh:

sudo chmod 700 /home/user/.ssh

Pliki w katalogu .ssh powinny mieć uprawnienia 600:

sudo chmod 600 /home/user/.ssh/authorized_keys
Adam
źródło
Byłbym ostrożny z używaniem tego bez zastrzeżeń. Uprawnienia kluczy SSH są zwykle ograniczone do 400 w przypadku niektórych kluczy, w szczególności AWS. Próba ustawienia ich powyżej spowoduje, że klucz nie zostanie zaakceptowany, co może zablokować Ci konto AWS.
Michael Ryan Soileau,
1

W moim przypadku problemem były uprawnienia do katalogu. Naprawiłem to dla mnie:

$ chmod 750 ~;chmod 700 ~/.ssh
tbc0
źródło
0

W moim przypadku tak się działo, ponieważ użyłem nazwy użytkownika „ubuntu”, ale nazwa użytkownika w tym przypadku to „ec2-user”

Po zrobieniu tego, co sugerował „John T”, otrzymałem ten błąd:

Odmowa dostępu (publickey).

Następnie znalazłem rozwiązanie (tj. Zmieniając nazwę użytkownika na „ec2-user”) w tej odpowiedzi: https://stackoverflow.com/questions/1454629/aws-ssh-access-permission-denied-publickey-issue

Deepak Joy
źródło
0

Miałem swój klucz publiczny .ssh/authorized_keys2, ale serwer skonfigurowano tylko do odczytu .ssh/authorized_keys:

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile .ssh/authorized_keys

Po przeniesieniu pliku do .ssh/authorized_keysmogę pomyślnie zalogować się za pomocą mojego klucza.

Benedikt Köppel
źródło
0

Zbyt wiele błędów uwierzytelnienia

Ten komunikat jest spowodowany zbyt dużą liczbą nieudanych prób uwierzytelnienia, biorąc pod uwagę dozwolone limity narzucone na zdalnym serwerze SSH. To potencjalnie oznacza, że ​​masz za dużo tożsamości dodanych w agencie SSH.

Oto kilka sugestii:

  • Dodaj, -vaby zobaczyć, czy tak jest w przypadku (używasz zbyt wielu tożsamości).
  • Wyświetl listę dodanych tożsamości według ssh-add -l.
  • Usuń braku tożsamości ze środka przez: ssh-add -d.
  • Możesz również usunąć wszystkie tożsamości ssh-add -Di ponownie dodać tylko jedną odpowiednią.
  • Jeśli masz dostęp do serwera SSH, zaznacz MaxAuthTriesopcję (patrz man sshd_config:).

    Temat pokrewny: Jakie jest powiązanie z sshd_configlimitem „MaxAuthTries”?

  • Jeśli to nie pomoże, upewnij się, że używasz odpowiednich poświadczeń lub pliku.

kenorb
źródło
-1

Ten komunikat może się pojawić, gdy nie zostanie wprowadzona poprawna nazwa użytkownika i hasło.

Najpierw sprawdź, czy użytkownik jest na liście:

vim /etc/passwd
Matoeil
źródło