Перейти к основному содержимому
Вернуться в категорию

Настройка 2FA для SSH: безопасность с Google Authenticator

Настройте двухфакторную аутентификацию (2FA) для SSH-доступа. PAM-модуль Google Authenticator, настройка TOTP для SSH, резервные коды, тестирование и устранение неполадок.

Время чтения: 12 мин Безопасность
2faдвухфакторная аутентификацияgoogle authenticatortotpбезопасность sshpamlinuxmfa

Содержание

Настройка 2FA для SSH: безопасность с Google Authenticator

Хотя использование SSH-ключей повышает безопасность, двухфакторная аутентификация (2FA) обеспечивает дополнительный уровень защиты. Даже если кто-то получит ваш SSH-ключ, он не сможет войти в систему без кода 2FA.

Почему важна 2FA?

  • Защита от кражи ключей: Даже при краже SSH-ключа требуется код 2FA
  • Устойчивость к брутфорсу: Комбинация пароль + 2FA намного надёжнее
  • Соответствие требованиям: Стандарты PCI-DSS, HIPAA требуют 2FA
  • Простая настройка: Активируется за несколько минут

Требования

  • Linux-сервер (Ubuntu/Debian/CentOS)
  • Смартфон (Google Authenticator, Authy или аналогичное приложение)
  • Существующий SSH-доступ

Не закрывайте существующее SSH-соединение во время настройки 2FA. Тестируйте с нового терминала после каждого шага. Неправильная конфигурация может полностью заблокировать доступ к серверу.

Установка PAM-модуля Google Authenticator

hljs bash
# Ubuntu/Debian
sudo apt update
sudo apt install libpam-google-authenticator -y

# CentOS/AlmaLinux
sudo dnf install epel-release -y
sudo dnf install google-authenticator -y

Настройка TOTP

hljs bash
# Запустите от имени пользователя, для которого нужно включить 2FA
google-authenticator

При запуске команды будут заданы вопросы:

Do you want authentication tokens to be time-based (y/n) y

В этот момент отобразится QR-код и секретный ключ. Отсканируйте QR-код приложением Google Authenticator.

Do you want me to update your "/home/user/.google_authenticator" file? (y/n) y
Do you want to disallow multiple uses of the same authentication token? (y/n) y
Do you want to increase the window size? (y/n) n
Do you want to enable rate-limiting? (y/n) y

Сохранение резервных кодов

Во время настройки отображаются 5 резервных кодов. Сохраните их в надёжном месте:

Your emergency scratch codes are:
  12345678
  87654321
  11223344
  44332211
  99887766

Храните резервные коды в надёжном месте (менеджер паролей, бумага и т.д.). Если вы потеряете телефон, эти коды будут единственным способом войти.

Настройка PAM

hljs bash
sudo nano /etc/pam.d/sshd
# Добавить в начало /etc/pam.d/sshd:
auth required pam_google_authenticator.so

Настройка SSH

hljs bash
sudo nano /etc/ssh/sshd_config
# Включить клавиатурно-интерактивную аутентификацию
ChallengeResponseAuthentication yes

# Установить методы аутентификации
# Вариант 1: Только 2FA
AuthenticationMethods keyboard-interactive

# Вариант 2: SSH-ключ ИЛИ 2FA
# AuthenticationMethods publickey keyboard-interactive

# Вариант 3: SSH-ключ И 2FA (наиболее безопасный)
AuthenticationMethods publickey,keyboard-interactive

UsePAM yes
hljs bash
# Перезапустить SSH-службу
sudo systemctl restart sshd

Комбинация SSH-ключ + 2FA (Рекомендуется)

hljs bash
sudo nano /etc/ssh/sshd_config
AuthenticationMethods publickey,keyboard-interactive
PasswordAuthentication no
ChallengeResponseAuthentication yes
UsePAM yes
hljs bash
sudo nano /etc/pam.d/sshd
# Закомментировать аутентификацию по паролю:
# @include common-auth

# Добавить 2FA
auth required pam_google_authenticator.so

Тестирование

hljs bash
# Открыть новый терминал и попробовать подключиться
ssh пользователь@ip_сервера

# Ожидаемый вывод:
# Verification code: (введите код из Google Authenticator)

Устранение неполадок

Код 2FA не принимается

hljs bash
# Проверить время сервера
date
timedatectl

# Синхронизация NTP
sudo apt install ntp -y
sudo systemctl restart ntp

Восстановление при блокировке

hljs bash
# Подключиться через консольный доступ
# Временно отключить 2FA
sudo nano /etc/pam.d/sshd
# Добавить # перед: auth required pam_google_authenticator.so

sudo systemctl restart sshd

Исключение определённых пользователей из 2FA

hljs bash
sudo nano /etc/pam.d/sshd
# Исключить определённые группы
auth [success=1 default=ignore] pam_succeed_if.so user ingroup notp
auth required pam_google_authenticator.so
hljs bash
# Создать группу notp и добавить пользователя
sudo groupadd notp
sudo usermod -aG notp deploy_user

Приложения вроде Authy или 1Password предлагают облачное резервное копирование и поддержку нескольких устройств по сравнению с Google Authenticator. Рассмотрите эти альтернативы для корпоративных сред.

Заключение

Настройка 2FA для SSH значительно повышает безопасность сервера. С PAM-модулем Google Authenticator вы можете активировать TOTP-based 2FA за несколько минут. Комбинация SSH-ключ + 2FA формирует один из наиболее надёжных методов аутентификации.