Категория: Доступ и аутентификацияОбновлено 2026-10-27

KbdInteractiveAuthentication

KbdInteractiveAuthentication это директива сервера OpenSSH (sshd_config), которая определяет, разрешена ли аутентификация keyboard-interactive. Она принимает yes или no, а по руководству значение по умолчанию yes. Это современное имя ChallengeResponseAuthentication, и вместе с UsePAM именно через неё PAM запрашивает пароль или одноразовый код, поэтому на сервере только с ключами её стоит отключить.

Строки sshd_config с KbdInteractiveAuthentication для сервера только с ключами и для ключа плюс одноразовый код с UsePAM
Две типичные настройки: без keyboard-interactive вовсе или с ним для одноразового кода.

Допустимые значения и значение по умолчанию

Согласно руководству sshd_config, аргумент должен быть yes или no, а значение по умолчанию yes. Keyboard-interactive это универсальный метод входа SSH из RFC 4256: сервер присылает один или несколько запросов, а клиент на них отвечает. Запросом может быть пароль, одноразовый код или несколько вопросов, и что именно появится, решает сервер.

В Linux запросы обычно задаёт PAM. Портируемое руководство говорит, что при UsePAM yes аутентификация PAM работает и через KbdInteractiveAuthentication, и через PasswordAuthentication, а сам UsePAM по умолчанию равен no.

Пакеты Debian отличаются от upstream. В справочной странице Debian среди параметров, которые пакет задаёт в /etc/ssh/sshd_config, указаны KbdInteractiveAuthentication no и UsePAM yes, а справочная страница Ubuntu говорит то же самое. Поэтому встроенное значение и значение на вашем сервере могут различаться. Всегда читайте действующее значение, а не предполагайте его.

ChallengeResponseAuthentication, старое имя

Старые инструкции и системы управления конфигурацией до сих пор используют ChallengeResponseAuthentication. В примечаниях к OpenSSH 8.7 от 2021-08-20 есть исправление, которое убирает упоминания старого ключевого слова в пользу KbdInteractiveAuthentication. В руководстве sshd_config старое имя по-прежнему названо устаревшим псевдонимом, поэтому старые файлы продолжают работать, но в новой конфигурации стоит использовать текущее имя.

Причину объясняет сообщение коммита: старое имя пришло из протокола SSH 1, новое из протокола 2, и они не были полностью эквивалентны. На практике скрипт, который правит только старое имя, может пропустить нужную настройку, поэтому перед тем как доверять файлу, поищите оба варианта:

sudo grep -rniE 'challengeresponse|kbdinteractive' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/
sudo sshd -T | grep -i '^kbdinteractiveauthentication '

Вторая команда показывает значение, которое sshd использует на самом деле. Оно решает дело, когда ключевое слово встречается в нескольких файлах или строках.

Взаимодействие с PasswordAuthentication, UsePAM и AuthenticationMethods

Keyboard-interactive может запросить пароль учётной записи, поэтому одного PasswordAuthentication no недостаточно, чтобы закрыть вход по паролю. Портируемое руководство отмечает, что эти два метода обычно играют одну роль, и советует отключить один из них. Для сервера только с ключами отключите оба и оставьте ключи включёнными, как объясняет статья про PasswordAuthentication:

PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no

Для ключа и одноразового кода keyboard-interactive должен остаться включённым, потому что именно он несёт запрос кода от модуля PAM:

UsePAM yes
KbdInteractiveAuthentication yes
PasswordAuthentication no
AuthenticationMethods publickey,keyboard-interactive

Без строки AuthenticationMethods PAM мог бы принять один лишь пароль как самостоятельный вход. Директива также допускается в блоках Match, поэтому проверяйте действующее значение для конкретного пользователя. Если указать keyboard-interactive в AuthenticationMethods и при этом отключить сам метод, получится ловушка блокировки, о которой сказано в той статье.

Как проверить и безопасно протестировать

Не закрывайте текущую сессию и работайте из второго терминала. Отредактируйте файл, проверьте его, прочитайте действующие значения и только потом перезагружайте службу. Руководство sshd(8) описывает -t как проверку корректности, а -T как вывод действующей конфигурации, при необходимости для соединения, заданного через -C:

sudo sshd -t
sudo sshd -T -C user=deploy,addr=192.0.2.10,host=server | grep -iE '^(kbdinteractive|passwordauth|pubkeyauth|usepam|authenticationmethods)'
sudo systemctl reload ssh     # на некоторых дистрибутивах sshd
ssh -o PubkeyAuthentication=no -o PreferredAuthentications=keyboard-interactive -l deploy your-server

На сервере только с ключами последняя команда должна завершиться отказом без какого-либо запроса. Держите наготове консоль провайдера и знайте шаги из руководства по восстановлению доступа к SSH.

Полный порядок внедрения описан в руководстве по усилению защиты SSH, настройка запроса кода в руководстве по двухфакторной аутентификации SSH, а правило первого значения объясняет статья про sshd_config.

Связанные термины: sshd_config, PasswordAuthentication, PAM, Двухфакторная аутентификация, Аутентификация по ключам.

Часто задаваемые вопросы

Какое значение KbdInteractiveAuthentication по умолчанию?

По руководству OpenSSH это yes. Debian и Ubuntu поставляют sshd_config, где задано no, поэтому проверьте действующее значение командой sudo sshd -T | grep -i kbdinteractiveauthentication.

ChallengeResponseAuthentication это то же самое?

Это старое имя. В OpenSSH 8.7 упоминания о нём заменили на KbdInteractiveAuthentication, а руководство называет его устаревшим псевдонимом. В новой конфигурации используйте новое имя.

Нужно ли ставить KbdInteractiveAuthentication no?

Да, на сервере только с ключами, вместе с PasswordAuthentication no, потому что при UsePAM он всё ещё может запросить пароль. Нет, если PAM выдаёт одноразовый код в схеме ключ плюс код.

Нужен ли KbdInteractiveAuthentication yes для TOTP?

Да. Запрос кода передаётся через keyboard-interactive, поэтому включите его вместе с UsePAM yes и потребуйте через AuthenticationMethods publickey,keyboard-interactive.

Почему я всё ещё могу ввести пароль после PasswordAuthentication no?

Keyboard-interactive при UsePAM yes может по-прежнему запросить пароль учётной записи. Задайте и KbdInteractiveAuthentication no и подтвердите результат через sshd -T.

Хотите увидеть, в каком состоянии ваш сервер?

Запустите бесплатную read-only проверку сервера или откройте Security Lab и посмотрите цикл обнаружение, сдерживание, восстановление, проверка в действии.

Получить бесплатную проверку сервераОткрыть Security Lab