
У меня есть учетная запись hostgator с включенным доступом ssh. При попытке загрузить сгенерированный файл ключа .pub с помощью этой команды:
rsync -av -e "ssh -p2222" /home/user/.ssh/key.pub [email protected]:.ssh/authorized_keys
Я постоянно получаю:
Получено отключение от 111.222.33.44: 2: Слишком много ошибок аутентификации для имени пользователя rsync: соединение неожиданно закрыто (пока получено 0 байт) [отправитель] ошибка rsync: необъяснимая ошибка (код 255) в io.c(601) [sender=3.0.7]
Я раньше игрался с ssh, пока не получил ошибку аутентификации. Но теперь, похоже, счетчик ошибок аутентификации не сбрасывается (жду уже больше 12 часов, техподдержка «полагает», что он сбрасывается через 30 минут или 1 час, а другой парень сказал мне, что «он сбрасывается каждый раз, когда вы пытаетесь войти с именем пользователя», черт возьми).
Это сводит меня с ума. Я даже настроил это на сервере Slicehost и у меня было меньше проблем, чем с этими ребятами.
Есть какие-нибудь советы? Возможно, это что-то на стороне клиента, а не сервера.
решение1
Это обычновызвано непреднамеренным предложением нескольких ключей SSHна сервер. Сервер отклонит любой ключ после того, как будет предложено слишком много ключей.
Вы можете убедиться в этом сами, добавив флаг -v
к своей ssh
команде, чтобы получить подробный вывод. Вы увидите, что предлагается набор ключей, пока сервер не отклонит соединение, сказав:«Слишком много неудачных попыток аутентификации для [пользователя]». Без подробного режима вы увидите только неоднозначное сообщение.«Сброс соединения пиром».
Чтобы предотвратить предложение нерелевантных ключей, необходимо явно указать это в каждой записи хоста в ~/.ssh/config
файле (на клиентской машине), добавив IdentitiesOnly
следующее:
Host www.somehost.com
IdentityFile ~/.ssh/key_for_somehost_rsa
IdentitiesOnly yes
Port 22
Если вы используете ssh-agent, его полезно запустить 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/
решение2
Я нашел более простой способ сделать это (при использовании аутентификации по паролю):
ssh -o PubkeyAuthentication=no [email protected]
Это принудительно включает аутентификацию без ключа. Я смог войти немедленно.
решение3
Я тоже получал эту ошибку и обнаружил, что это происходит из-за того, что сервер был настроен на прием до 6 попыток:
/etc/ssh/sshd_config
...
...
#MaxAuthTries 6
Помимо настройки IdentitiesOnly yes
в вашем ~/.ssh/config
файле у вас есть еще несколько опций.
- Увеличьте
MaxAuthTries
(на сервере ssh) - удалите некоторые пары ключей, которые есть в вашем
~/.ssh/
каталоге, и запуститеssh-add -D
- явно связать ключ с указанным хостом в вашем
~/.ssh/config
файле
Вот так:
host foo
hostname foo.example.com
IdentityFile /home/YOU/.ssh/foo
Вероятно, это не лучший способ, учитывая, что это немного ослабит ваш сервер ssh, поскольку теперь он будет принимать больше ключей при данной попытке подключения. Подумайте о векторах атаки методом подбора.
Это хороший способ, если у вас есть ненужные ключи, которые можно удалить навсегда.
И подход с установкой IdentitiesOnly, вероятно, является предпочтительным способом решения этой проблемы!
решение4
Если вы получили следующую ошибку SSH:
$ Received disconnect from host: 2: Too many authentication failures for root
Это может произойти, если в вашем каталоге .ssh хранится пять или более файлов идентификации DSA/RSA (по умолчанию в моей системе), и если в командной строке не указана опция '-i'.
Клиент ssh сначала попытается войти, используя каждую идентификацию (закрытый ключ), а затем запросит парольную аутентификацию. Однако sshd разрывает соединение после пяти неудачных попыток входа (опять же, значение по умолчанию может отличаться).
Если в вашем каталоге .ssh имеется несколько закрытых ключей, вы можете отключить «аутентификацию с открытым ключом» в командной строке, используя необязательный аргумент «-o».
Например:
$ ssh -o PubkeyAuthentication=no root@host