Вот моя рабочая конфигурация. У некоторых пользователей включен аутентификатор, а у некоторых нет, и разрешены только входы в систему SSH с открытыми ключами, а не пароли.
В /etc/ssh/sshd_config,
ИспользоватьPAM да
ПарольАутентификация нет
ВызовОтветАутентификация да
Методы аутентификации с открытым ключом, интерактивной клавиатурой
PermitEmptyPasswords нет
В /etc/pam.d/sshd,
# Стандартная аутентификация Un*x.
#@include общая аутентификация
# Требовать аутентификатор, если он не настроен, то разрешить
требуется авторизация pam_google_authenticator.so отладка nullok
требуется авторизация pam_permit.so
@include общая аутентификация
должен быть отключен, потому что он включает pam_unix, который я не хочу использовать. Тогда вам нужно pam_permit
сделать аутентификацию успешной для пользователей без аутентификатора (для которых pam_google_authenticator
возвращает игнорировать, а не передать).
Это по-прежнему не позволяет root войти в систему с ключом ssh; журналы sshd
sshd [1244501]: фатальная: внутренняя ошибка: аутентификация PAM прошла успешно, хотя должна была завершиться ошибкой
Это обсуждается на Google Authenticator PAM на SSH блокирует вход root без 2FA .
Получив это, как указано выше, я думаю, что на самом деле лучше применять 2FA для определенных групп, используя конфигурацию SSH, как предложил @zoredache. Это легко позволяет вам внести в белый список определенные IP-адреса как не требующие 2FA. В этом случае sshd_config говорит, например,
ИспользоватьPAM да
ПарольАутентификация нет
ВызовОтветАутентификация да
#Методы аутентификации любые # по умолчанию
PermitEmptyPasswords нет
Совпадение с адресом группового администратора *,!172.16.1.0/24
Методы аутентификации с открытым ключом, интерактивной клавиатурой
и /etc/pam.d/ssh говорит
Стандартная аутентификация Un*x.
#@include общая аутентификация
# Требовать аутентификатор; SSH не должен допускать ни одного пользователя, у которого его нет
достаточно аутентификации pam_google_authenticator.so отладить nullok
реквизиты авторизации pam_deny.so