Я нашел статью (http://www.howtogeek.com/121650/how-to-secure-ssh-with-google-authenticators-two-factor-authentication/), в котором объясняется, как настроить OpenSSH для запроса кода Google Authenticator при успешном входе в систему.
Можно ли настроить OpenSSH так, чтобы происходило следующее:
- Если у пользователя есть правильный закрытый ключ для входа на сервер, войдите в систему.
- Если у пользователя нет закрытого ключа, позволяющего войти на сервер, запросите у пользователя пароль учетной записи и код Google Authenticator.
Это было бы удобно (поскольку на моих компьютерах мне нужен был бы только закрытый ключ) и безопасно (поскольку я мог бы оставить аутентификацию по паролю включенной и безопасной).
Есть ли способ добиться того, чего я хочу?
Заранее спасибо. :)
решение1
Определенно возможно настроить так, sshd
чтобы требовалосьилидействительная пара ключейилииспользовать HOTP (новый одноразовый пароль (OTP) на каждый запрос) аутентификацию на основе OATH - я это делаю. Я почти уверен, что Google Authenticator - это просто еще одна реализация OATH.
Мой полный текст можно прочитать здесьhttp://www.teaparty.net/technotes/yubikey-oath.html, но результат таков:
Предполагая, что у вас sshd
уже настроена аутентификация на основе открытого ключа (большинство из них таковы), добавьте эти две строки в sshd_config
:
PasswordAuthentication no
ChallengeResponseAuthentication yes
Установка pam_auth
(этот способ ориентирован на CentOS, для x86_64):
yum install pam_oath
ln -s /usr/lib64/security/pam_oath.so /lib64/security/
Создайте файл аутентификации /etc/users.oath
, режим 600
, владелец root:root
и заполните его строками следующего вида:
#type username pin start seed
HOTP fred - 123a567890123b567890123c567890123d567890
Отредактируйте /etc/pam.d/sshd
и добавьте строку
auth required pam_oath.so usersfile=/etc/users.oath window=5 digits=8
Пропустите, digits=8
если вас устраивает 6-значный HOTP OATH. Я считаю, что аналогичный метод можно использовать для TOTP OATH (новый OTP каждыенсекунд), но я использую аппаратные токены OATH вместо программных, и это YubiKey, которые поддерживают только HOTP OATH.
Единственная загвоздка в том, что когда вы подключаетесь по ssh, не предоставляя действительный ключ, он запрашивает OATH-код.допароль. Я не смог заставить его работать наоборот, но решил, что мне все равно; подсказки довольно ясно дают понять, какой токен запрашивается.
решение2
Вам необходимо добавить:
AuthenticationMethods publickey keyboard-interactive
без запятой между publickey
и keyboard-interactive
до /etc/ssh/sshd_config
. Все остальные настройки менять не нужно (при условии, что конфигурация соответствует данному уроку howtogeek).