Двухфакторная аутентификация для SSH > настройка Google Authenticator

SSH это стандартный способ удалённого управления серверами. И он же самая популярная цель для атак. Пароли подбираются ботами за считанные минуты, а если у вас слабый пароль, сервер могут взломать даже без вашего ведома. Даже использование ключей не даёт стопроцентной гарантии, если ключ украдут с рабочей станции.

Многие администраторы до сих пор полагаются только на пароль или ключ. Но что, если этого недостаточно? Представьте, что злоумышленник получил ваш закрытый ключ или подобрал пароль. Тогда доступ к серверу открыт. Хотелось бы дополнительно защитится.

Решение

Двухфакторная аутентификация (2FA) добавляет второй уровень проверки. Даже если злоумышленник узнал ваш пароль или украл ключ, без одноразового кода он не войдёт. Самый простой и распространённый способ — использовать Google Authenticator (или любой совместимый TOTP-клиент, например, Authy, Яндекс.Ключ).

Мы настроим вход по SSH так, что после ввода пароля (или использования ключа) система запросит шестизначный код из приложения на телефоне. Это занимает 10 минут и работает на любом современном Linux.

Пошаговая инструкция

Шаг 1. Установка необходимых пакетов

На сервере нужно установить модуль PAM для Google Authenticator.

Для Ubuntu/Debian:

Терминал bash

sudo apt update
sudo apt install libpam-google-authenticator

Для CentOS/RHEL 8/9:

Терминал bash

sudo dnf install epel-release
sudo dnf install google-authenticator

Для CentOS/RHEL 7:

Терминал bash

sudo yum install epel-release
sudo yum install google-authenticator

Шаг 2. Настройка PAM для SSH

Нужно отредактировать файл конфигурации PAM для SSH.

Терминал bash

sudo nano /etc/pam.d/sshd

Добавьте в конец файла (или раскомментируйте) строку:

auth required pam_google_authenticator.so

Важно: убедитесь, что строка стоит после других настроек аутентификации, но до общих системных строк. Обычно её размещают перед @include common-auth.

Сохраните файл.

Шаг 3. Настройка SSH-сервера

Теперь нужно сказать SSH, что мы хотим использовать два фактора. Отредактируйте конфигурацию SSH:

Терминал bash

sudo nano /etc/ssh/sshd_config

Найдите и измените следующие параметры:

ChallengeResponseAuthentication yes
UsePAM yes

Также можно настроить, какие методы аутентификации использовать. Если вы хотите использовать и ключи, и пароли, и Google Authenticator, то варианты могут быть разными.

Самый безопасный вариант: сначала проверка по ключу, затем код из аутентификатора. Для этого установите:

AuthenticationMethods publickey,keyboard-interactive

Это значит: сначала система проверит наличие правильного ключа, затем спросит код (через keyboard-interactive, который будет обрабатываться PAM с нашим модулем).

Если вы хотите оставить возможность входа по паролю, но добавить второй фактор, можно использовать:

AuthenticationMethods password,keyboard-interactive

Но лучше использовать ключи, так как они безопаснее паролей.

После изменений сохраните файл и перезапустите SSH:

Терминал bash

sudo systemctl restart sshd

Шаг 4. Настройка Google Authenticator для пользователя

Каждый пользователь, который будет входить по SSH, должен настроить аутентификатор под своей учёткой. Зайдите на сервер под нужным пользователем (или зайдите по текущему SSH и выполните):

Терминал bash

google-authenticator

Вас спросят несколько вопросов. Рекомендуемые ответы:

  • Make tokens time-based (да, нажмите y).
  • Обновите код в приложении, когда увидите QR-код (отсканируйте его в приложении Google Authenticator на телефоне).
  • Сохраните резервные коды в надёжном месте (они понадобятся, если потеряете телефон).
  • Обновлять файл конфигурации? Да (y).
  • Запретить повторное использование кодов? Да (y).
  • Увеличить окно времени? Обычно нет (n), если вы не хотите компенсировать рассинхронизацию часов.
  • Включить ограничение скорости? Да (y) — это защита от перебора.

После этого у вас появится секретный ключ, резервные коды и QR-код. Отсканируйте QR-код приложением на телефоне.

Шаг 5. Проверка входа

Теперь попробуйте подключиться к серверу по SSH в новом окне терминала (не закрывайте текущую сессию, чтобы не заблокировать себя).

Если вы настроили метод publickey,keyboard-interactive, то сначала вас попросят ввести парольную фразу для ключа (если она есть), а затем появится запрос Verification code:

$ ssh user@server
Enter passphrase for key '/home/user/.ssh/id_rsa':
Verification code:

Введите шестизначный код из приложения Google Authenticator. Если всё правильно, вы войдёте.

Если вы настроили метод password,keyboard-interactive, то сначала введёте пароль, потом код.

Шаг 6. Важные нюансы

Что делать, если потерял телефон?
Резервные коды, которые вы сохранили при настройке, можно использовать для входа. Каждый код работает один раз. Также можно заранее настроить несколько пользователей или иметь запасной способ входа (например, через консоль или iDRAC/iLO).

Работает ли это с ключами?
Да, при методе publickey,keyboard-interactive сначала проверяется ключ, потом код. Это безопасно и удобно.

Можно ли отключить пароли совсем?
Да, в sshd_config можно установить PasswordAuthentication no, оставив только ключи и второй фактор.

Проблемы со временем на сервере?
Google Authenticator использует временные метки. Если на сервере неправильное время, коды не будут совпадать. Убедитесь, что на сервере настроена синхронизация времени (NTP).

Теперь ваш SSH защищён двухфакторной аутентификацией. Даже если злоумышленник узнает пароль или украдёт ключ, без доступа к вашему телефону он не пройдёт. Это простое действие сильно повышает безопасность сервера.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Популярные
Новые Старые

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
Menu