Я работаю с кластером из 20 хостов, на всех из которых установлена ОС CentOS 7.3.
Я пытаюсь создать автоматизированный тест для проверки следующего:
- Наше ожидаемое сетевое подключение установлено.
- Наше решение SSH Single Sign On (SSO) работает
Ожидаемое сетевое соединение очень простое: это одна плоская подсеть. Каждый хост должен иметь возможность связаться с любым другим хостом.
Наше решение SSH SSO (FreeIPA) использует Kerberos для аутентификации пользователей и использует открытые ключи SSH для аутентификации хостов. Билет Kerberos Ticket Granting Ticket (TGT) пользователя настроен на пересылку на любой хост, к которому пользователь подключается с помощью SSH.
Тест очень прост:
Попросите каждый хост использовать SSH для выполненияимя хостакак удаленную команду на любом другом хосте.
Для этого я использую утилиту под названиемпдш.
В двух словах, эта утилита использует SSH для выполнения удаленной команды на наборе хостов. Она делает это параллельно, порождая поток для каждого хоста и в каждом из этих потоков выполняя командусш .
Я использую эту команду следующим образом. На машине, которая не является одним из 20 хостов кластера, я выполняю эту команду:
pdsh -g all 'pdsh -g all "hostname"'
-г всеуказывает, что удаленная команда должна быть запущена на всех хостах кластера. Как указано, у меня 20 хостов кластера.
Команда, которую необходимо выполнить на каждом удаленном хосте:
pdsh -g all "hostname"
Итак, как указано выше, каждый хост пытается выполнить команду «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 хостов за очень короткий промежуток времени. Происходят случайные сбои аутентификации пользователей.
Почему могут возникать такие сбои аутентификации пользователей?
решение1
Если вы повторно открываете сеансы SSH на тех же хостах, я бы рекомендовал использовать управляющие мастер-подключения. По сути, аутентифицированный сеанс удерживается клиентом и сервером, избегая повторной аутентификации.
Смотрите также:ssh_config(5) -- Мастер управления