в openssh можно ли указать команду, которая будет выполняться при каждой попытке входа в систему?

в openssh можно ли указать команду, которая будет выполняться при каждой попытке входа в систему?

Я получаю много атак на вход в систему по протоколу SSH и хочу сократить их количество. Есть ли способ указать команду для выполнения openssh и проверить возвращаемое ею значение, а также разрешить попытку входа только в том случае, если эта команда возвращает 0?

Причина этого в том, что я хотел бы иметь возможность иметь более сложные правила входа в систему, которые я мог бы выразить в скрипте, а не через простые правила на основе файлового экрана/IP.

решение1

Да, с достаточно современным openssh есть трюк: используйте AuthorizedKeysCommand. Этот параметр конфигурации позволяет вам указать внешнюю команду для получения ключей SSH. Здесь вы можете поместить логику, например, получение ключей SSH из LDAP, но также и любую другую логику, которую вы хотите. Пока вы принимаете только аутентификацию на основе ключей, отсутствие возврата ключей приведет к сбою аутентификации.

В старых версиях openssh можно использовать ForceCommand, но это принудительная команда.послеаутентификация, а не команда, которая выполняетсядоаутентификация. Однако он работает как с аутентификацией на основе пароля, так и с аутентификацией на основе ключа.

Если вы хотите поддерживать аутентификацию на основе пароля и хотите подключиться к фазе аутентификации, вам нужно будет написать свой собственный модуль PAM и сделать его обязательным для аутентификации SSH. Это не самый тривиальный способ, и он не вызывается для аутентификации на основе ключа.

Если все, что вам нужно, — это заблокировать IP-адреса, на которых слишком много неудачных попыток аутентификации, fail2ban также может вам помочь, не требуя никаких изменений в настройках SSH.

Связанный контент