Занадто багато збоїв аутентифікації для * ім'я користувача *


256

У мене є обліковий запис хост-менеджера з включеним дозволом ssh. Під час спроби завантажити згенерований файл ключа .pub за допомогою цієї команди:

rsync -av -e "ssh -p2222" /home/user/.ssh/key.pub username@111.222.33.44:.ssh/authorized_keys

Я продовжую отримувати:

Отримано відключення від 111.222.33.44: 2: Забагато помилок аутентифікації для імені користувача
rsync: з'єднання несподівано закрите (0 байтів, отриманих дотепер) [відправник]
Помилка rsync: незрозуміла помилка (код 255) у io.c (601) [sender = 3.0.7]

Я раніше грав із ssh, поки не отримав автентичну помилку. Але зараз здається, що лічильник несправностей аутентичності не скидається (чекали більше 12 годин, технічна підтримка "припускає" його скидає через 30 хв до 1 години, а інший хлопець сказав мені "він скидає кожен раз, коли ви намагаєтесь увійти з ім’я користувача ", jeesh).

Це ганяє мене. У мене навіть це було налаштовано на власному сервері Slicehost і було менше проблем, ніж у цих хлопців.

Якісь поради? Можливо, це щось із боку клієнта, а не з боку сервера.


У моєму випадку сталася помилка при створенні ключа. Я створив ключ, і я пропустив згадати вихідну адресу та використав ім’я користувача в кінці ключа.
репортер

Відповіді:


416

Зазвичай це викликано ненавмисним пропонуванням декількох клавіш ssh для сервера. Сервер відхилить будь-який ключ після того, як було запропоновано занадто багато ключів.

Ви можете переконатися в цьому, додавши -vпрапор до sshкоманди, щоб отримати багатослівний вихід. Ви побачите, що пропонується купа ключів, поки сервер не відхилить з'єднання, кажучи: "Забагато помилок аутентифікації для [користувача]" . Без багатословного режиму ви побачите лише неоднозначне повідомлення "Скидання з’єднання одночасно" .

Щоб запобігти пропонуванню невідповідних ключів, вам слід чітко вказати це у кожному записі хоста у ~/.ssh/configфайлі (на клієнтській машині), додавши IdentitiesOnlyтак:

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

Якщо ви використовуєте ssh-агент, він допомагає запустити, ssh-add -Dщоб очистити особи.

Якщо ви не використовуєте жодної конфігурації хостів ssh, вам слід чітко вказати правильну клавішу в sshкоманді, наприклад:

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

Примітка: параметр "IdentitiesOnly yes" повинен бути між цитатами.

або

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

5
мені незрозуміло, куди поставити цю лінію. На сервері, на який я намагаюся увійти, .ssh / config має інформацію лише для інших серверів. Ви маєте на увазі, що це має перейти у .ssh / config файл на комп’ютері, з якого я намагаюся ssh? Якщо це так, це незрозуміло, тому що у вашій відповіді написано "як тільки ви знову увійшли в систему ..."
David LeBauer

2
Я повинен поставити параметр у подвійних лапках, як ось це:ssh -i some_id_rsa -o "IdentitiesOnly yes" them@there:/path/
кнб

1
Користувачі Windows під керуванням PAGENT (агент Putty), переконайтеся, що ви завантажуєте лише потрібні ключі. Я зіткнувся з цим питанням після випадкового завантаження ВСІХ приватних ключів.
Кріс Раско

2
Залишається питання: чому ssh"пропонує декілька клавіш" (що-небудь під ~/.ssh), навіть коли правило для хоста має чітке IdentityFile /path/to/private_key_fileналаштування. Чи не повинен цей чітко вказаний ключ пропонувати (принаймні) спочатку? Це не помилка / непорозуміння у відкритому клієнті?
аріельф

2
Але чи не слід використовувати ключ, вказаний у цій IdentityFileопції? Наприклад, без IdentitiesOnlyможливості, він намагається використовувати мій githubключ, коли я намагаюся ssh gitlab.com. Це не має сенсу.
Юліан Онофрей

188

Я знайшов простіший спосіб зробити це (якщо використовується автентифікація пароля):

ssh -o PubkeyAuthentication=no username@hostname.com

Це змушує неідентифікувати аутентифікацію. Мені вдалося ввійти негайно.

Довідково


3
+1, бажаю, щоб я міг тобі дати більше. Raspberry Pi - єдиний пристрій, на який я впадаю без відкритого ключа.
Отримував

1
І використовувати це з rsync:rsync -av -e 'ssh -o PubkeyAuthentication=no' 'user@host.com:~/remote_file' 'local_file'
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

1
Ви також можете створити псевдонім, щоб зробити його ще швидшим для авторизації пароля. alias sshp = 'ssh -o PubkeyAuthentication = ні'
dhempler

26

Я також отримував цю помилку і виявив, що це відбувається, якщо сервер був налаштований приймати до 6 спроб:

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

Окрім встановлення IdentitiesOnly yesу вашому ~/.ssh/configфайлі, у вас є ще декілька варіантів.

  1. Збільшити MaxAuthTries(на ssh-сервері)
  2. видаліть декілька ключових пар, які були у вашому ~/.ssh/каталозі, і запустітьssh-add -D
  3. явно пов’язати ключ із заданим хостом у вашому ~/.ssh/configфайлі

Так:

host foo
hostname foo.example.com
IdentityFile /home/YOU/.ssh/foo
  1. Мабуть, це не дуже вдалий спосіб вирішити це, враховуючи, що він трохи послабить ваш ssh-сервер, оскільки він тепер прийме більше ключів у даній спробі підключення. Подумайте тут про грубі сили векторів нападу.

  2. Це хороший спосіб припустити, що у вас є непотрібні ключі та їх можна назавжди видалити.

  3. І підхід до встановлення IdentitiesOnly - це, мабуть, кращі способи вирішення цього питання!


В останньому рядку ви маєте Identifile /home/YOU/.ssh/foo, але він повинен бути ідентифікаційним файлом (не f)
дев'ять

7

Я додав до ~ / .ssh / config це:

Host *
IdentitiesOnly yes

Він дозволяє опцію IdentitiesOnly = так за замовчуванням. Якщо вам потрібно буде підключитися з приватним ключем, вам слід вказати його за допомогою параметра -i


6

Якщо ви отримали таку помилку SSH:

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

Це може статися, якщо у вашій системі (за замовчуванням у моїй системі) є п'ять або більше файлів посвідчень DSA / RSA, які зберігаються у вашому каталозі .ssh, і якщо параметр '-i' не вказаний у командному рядку.

Клієнт ssh спочатку спробує увійти, використовуючи кожну особу (приватний ключ) та наступний запит на автентифікацію пароля. Однак sshd припиняє з'єднання після п’яти спроб поганого входу (знову ж за замовчуванням може змінюватися).

Якщо у вашому каталозі .ssh є кілька приватних ключів, ви можете відключити "Аутентифікацію відкритих ключів" у командному рядку, використовуючи додатковий аргумент "-o".

Наприклад:

$ ssh -o PubkeyAuthentication=no root@host

Це саме було зі мною! Велике спасибі за пояснення;)
El Ninja Trepador

6

Якщо у вас є пароль і ви хочете просто використовувати пароль для входу, ось як це зробити.

Щоб використовувати ТОЛЬКУ автентифікацію пароля і НЕ використовувати відкритий ключ, а НЕ використовувати дезактивні "клавіатурно-інтерактивні" (це суперсеть, включаючи пароль), ви можете зробити це з командного рядка:

ssh -o PreferredAuthentications=password user@example.com

3

Виходячи з приказки @David, просто додайте це IdentitiesOnly yes до свого .ssh / config, це робить те саме, що іssh -o PubkeyAuthentication=no.

Після входу в систему видаліть .ssh/authorized_keys. Тепер поверніться до локальної машини і введіть наступне

cat ~/.ssh/id_rsa.pub | ssh -o PubkeyAuthentication=no user@IP_ADDR 'cat >> .ssh/authorized_keys'. Це має знову ввімкнути ваш ssh за допомогою відкритого ключа


2

Я знаю, що це старий потік, але я просто хотів додати сюди, що я наткнувся на те саме повідомлення про помилку, але це викликано власником папки .ssh root, а не користувачем, який використовував ключ. Я виправив проблему, виконавши наступні команди:

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

Я також переконався, що дозволи в папці .ssh були правильними:

sudo chmod 700 /home/user/.ssh

Файли в каталозі .ssh повинні мати дозвіл 600:

sudo chmod 600 /home/user/.ssh/authorized_keys

Я був би обережний з використанням цього без застереження. Для деяких ключів, зокрема AWS, дозволи на ключ SSH зазвичай обмежені до 400. Спроба встановити їх вище, це призведе до того, що ключ не буде прийнято, і це може заблокувати вас із вашого облікового запису AWS.
Michael Ryan Soileau

1

У моєму випадку проблема полягала в дозволах до каталогу. Це зафіксувало це для мене:

$ chmod 750 ~;chmod 700 ~/.ssh

0

У моєму випадку це сталося тому, що я використовував ім'я користувача "ubuntu", але ім'я користувача в цьому випадку було "ec2-користувачем"

Після того, як я зробив те, що запропонував "Джон Т", я отримав цю помилку:

Дозвіл відхилено (publickey).

Тоді я знайшов рішення (тобто змінити ім’я користувача на "ec2-користувач") у цій відповіді: https://stackoverflow.com/questions/1454629/aws-ssh-access-permission-denied-publickey-issue


0

У мене був відкритий ключ .ssh/authorized_keys2, але сервер був налаштований лише на читання .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

Після переміщення мого файлу до програми .ssh/authorized_keysя можу успішно увійти за допомогою свого ключа.


0

Занадто багато збоїв аутентифікації

Це повідомлення викликано занадто великою кількістю невдалих спроб аутентифікації з урахуванням дозволених обмежень на віддаленому сервері SSH. Це потенційно означає, що в агент SSH додано занадто багато ідентичностей.

Ось кілька пропозицій:

  • Додайте, -vщоб побачити, чи це так (ви використовуєте занадто багато посвідчень).
  • Список доданих ідентифікаторів від ssh-add -l.
  • Видалити відсутність ідентичності від агента по: ssh-add -d.
  • Ви також можете видалити всі ідентичності шляхом ssh-add -Dповторного додавання лише відповідних.
  • Якщо ви маєте доступ до SSH-сервера, перевірте MaxAuthTriesпараметр (див. man sshd_config:).

    Повідомлення, пов’язане з цим: Що таке з'єднання для sshd_configобмеження "MaxAuthTries"?

  • Якщо нічого з цього не допомогло, переконайтеся, чи використовуєте ви правильні облікові дані чи файл.


-1

Це повідомлення може з’являтися, коли не введено правильне ім’я користувача та пароль.

Спочатку перевірте, чи вказаний користувач:

vim /etc/passwd
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.