Я работаю с кластером из 20 хостов, все под управлением CentOS 7.3.
Я пытаюсь создать автоматический тест, чтобы проверить, что:
- Наше ожидаемое сетевое подключение установлено
- Наше решение SSH Single Sign On (SSO) работает
Ожидаемое подключение к сети очень просто: это единая, плоская подсеть. Каждый хост должен иметь возможность связаться с любым другим хостом.
Наше решение SSH SSO (FreeIPA) использует Kerberos для аутентификации пользователей и использует открытые ключи SSH для аутентификации хостов. Пользовательский билет Kerberos Ticket Granting Ticket (TGT) настроен на пересылку на любой хост, к которому пользователь подключается с использованием SSH.
Тест очень прост:
Пусть каждый хост попытается использовать SSH для выполнения имени хоста в качестве удаленной команды на каждом другом хосте.
Для этого я использую утилиту с именем pdsh.
В двух словах, эта утилита использует SSH для выполнения удаленной команды на множестве хостов. Он делает это параллельно, порождая поток для каждого хоста и в каждом из этих потоков, выполняя команду ssh.
Я использую эту команду следующим образом. На компьютере, который не является одним из 20 узлов кластера, я выполняю эту команду:
pdsh -g all 'pdsh -g all "hostname"'
-g all указывает, что удаленная команда должна выполняться на всех хостах кластера. Как уже говорилось, у меня 20 кластерных хостов.
Команда для выполнения на каждом удаленном хосте:
pdsh -g all "hostname"
Итак, как указано выше, каждый хост пытается выполнить команду "имя хоста" на каждом другом хосте как удаленную команду через SSH.
Таким образом, это приводит к 20 вызовам (по одному на хост кластера):
ssh 'pdsh -g all "hostname"'
В свою очередь это приводит к 20 * 20 = 400 вызовам:
ssh <hostname> hostname
Итак, у меня в общей сложности 20 + 400 = 420 SSH-аутентификаций, происходящих за очень короткий промежуток времени.
Проблема, которую я вижу, - небольшая горстка сбоев аутентификации. Хосты, на которых происходят сбои, являются произвольными. Там нет рифмы или причины. Отказ выглядит так:
host-5: host-3: Permission denied, please try again.
host-5: host-3: Permission denied, please try again.
host-5: host-3: Received disconnect from UNKNOWN: 2: Too many authentication failures for myuser
host-5: pdsh@host-5: host-3: ssh exited with exit code 255
В /etc/ssh/sshd_config сконфигурировано следующее для одновременного существования множества сеансов, которые должны быть аутентифицированы:
MaxStartups 500:30:600
Обратите внимание, что это слишком излишне - оно учитывает количество аутентификаций, проходящих в кластере, но на самом деле нужно только учитывать количество аутентификаций, происходящих на данном хосте. Итак, я думаю, что проблема кроется в другом.
Итак, в итоге, у меня есть большое количество аутентификаций пользователей SSH, происходящих через Kerberos на кластере из 20 хостов за очень короткий период времени. Происходят случайные сбои аутентификации пользователя.
Почему могут возникнуть такие ошибки аутентификации пользователя?