Гид по технологиям

Двухфакторная аутентификация для SSH на Ubuntu

• 7 min read • Безопасность • Обновлено 01 Dec 2025
2FA для SSH на Ubuntu — настройка шаг за шагом
2FA для SSH на Ubuntu — настройка шаг за шагом

Изображение: ноутбук с терминалом и блоком кода для настройки двухфакторной аутентификации SSH

В самой основе SSH уже обеспечивает защиту трафика между клиентом и сервером. Тем не менее, добавление двухфакторной аутентификации повышает безопасность: даже если пароль скомпрометирован, злоумышленник не сможет войти без одноразового кода. Эта инструкция ориентирована на Ubuntu Server; в других дистрибутивах команды и названия пакетов могут отличаться.

Содержание

  • Установка компонентов для двухфакторной аутентификации
  • Конфигурация Google Authenticator (libpam-google-authenticator)
  • Интеграция с PAM и sshd
  • Добавление ключа в приложение на смартфоне
  • Как заставить SSH требовать и ключ, и 2FA
  • Резервные варианты и отказоустойчивость
  • Руководство для администратора и пользователя
  • Частые проблемы и как их решать
  • Риски, матрица и рекомендации по безопасности

Установка компонентов для двухфакторной аутентификации

Откройте терминал на сервере, где вы будете настраивать 2FA, и выполните установку пакета:

sudo apt update
sudo apt install libpam-google-authenticator

После установки запустите утилиту настройки:

google-authenticator

Изображение: окно терминала, где выполняется установка пакета libpam-google-authenticator

Совет: полезно заранее убедиться, что время на сервере синхронизировано (ntp, systemd-timesyncd), иначе временные токены могут быть недействительны.

Конфигурация Google Authenticator (libpam-google-authenticator)

Утилита задаст серию вопросов. В большинстве случаев ответ «y» (yes) подходит. При ошибке прервите Ctrl+C и запустите google-authenticator заново.

  1. Утилита спросит, хотите ли вы использовать временные токены (time-based). Нажмите Y и Enter.

После этого вы увидите секретный ключ и аварийные коды. Сохраните их в надежном месте — они понадобятся для настройки приложения аутентификации и восстановления доступа.

Изображение: вывод утилиты google-authenticator с секретным ключом и резервными кодами

  1. Ответьте Y, чтобы обновить файл /home/username/.google_authenticator, куда будут записаны параметры.

  2. Отклонение многократного использования одного токена (disallow multiple uses) рекомендуем включить — это препятствует повторному использованию одноразовых кодов и уменьшает риск одновременного входа с разными устройствами.

  3. По умолчанию, каждый токен действителен 30 секунд. Параметр «window» позволяет увеличить допустимый сдвиг времени. Для компенсации расхождений часов часто применяют значение 4.

Изображение: настройка окна времени для токенов, увеличение до 4

  1. Включите ограничение по частоте (rate-limiting). Это ограничит число попыток ввода кода и снизит вероятность подбора: например, не более 3 попыток каждые 30 секунд.

Изображение: подсказка о включении rate-limiting

Важно: сохраните секретный ключ и резервные коды в безопасном месте сразу после генерации. При потере доступа к устройству восстановление возможно только при наличии этих данных.

Интеграция с PAM и sshd

  1. Откройте PAM-конфигурацию для SSH:
sudo nano /etc/pam.d/sshd

Изображение: открытие файла /etc/pam.d/sshd в текстовом редакторе

  1. Добавьте в начало файла строку (вставьте перед другими auth-правилами):
auth       required     pam_google_authenticator.so

Изображение: добавление строки pam_google_authenticator в конфиг PAM

  1. Сохраните и закройте файл (Ctrl+O, Enter, Ctrl+X).

  2. Откройте конфигурацию sshd:

sudo nano /etc/ssh/sshd_config
  1. Убедитесь, что следующие параметры заданы или добавьте их в конец файла:
ChallengeResponseAuthentication yes
UsePAM yes
  1. Если вы хотите, чтобы SSH требовал одновременно публичный ключ и 2FA (чтобы ключ не обходил 2FA), добавьте:
AuthenticationMethods publickey,keyboard-interactive

Эта настройка заставит SSH требовать сначала аутентификацию по ключу, а затем — по интерактивному методу (PAM), который обрабатывает Google Authenticator. Если вы хотите разрешить либо ключ, либо пароль+2FA, применяйте другие комбинации AuthenticationMethods.

Изображение: редактирование sshd_config для включения ChallengeResponseAuthentication

  1. Сохраните файл и перезапустите демон SSH:
sudo systemctl restart ssh

Изображение: перезапуск службы sshd на сервере

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

Добавление ключа в приложение на смартфоне

  1. Откройте приложение Google Authenticator (или совместимое приложение) на смартфоне или десктопе. Нажмите «+» и выберите “Enter a setup key” (в приложении может быть «Введите ключ настройки»).

Изображение: добавление нового ключа в приложение аутентификации

  1. Введите имя учётной записи (например, server.example.com) для распознавания.

Изображение: ввод имени для нового ключа в Google Authenticator

  1. Введите секретный ключ, сгенерированный ранее, и нажмите «Добавить».

Изображение: ввод секретного ключа в приложение аутентификации

При попытке подключения по SSH сервер теперь будет запрашивать проверочный код (verification code).

Изображение: пример запроса одноразового кода при подключении по SSH

Важно: модуль libpam-google-authenticator работает для парольных входов через PAM. Если в вашей системе настроена только аутентификация по публичному/приватному ключу и вы не требуете дополнительно keyboard-interactive через AuthenticationMethods, вход по ключу будет обходить 2FA.

Варианты и альтернативы

  • Если вы используете YubiKey или другой аппаратный токен, модуль libpam-google-authenticator не подходит. Для U2F/HOTP/YubiKey есть другие PAM-модули: pam_u2f, pam_yubico и т.д. Они требуют другой конфигурации PAM и sshd.
  • Для корпоративных сред можно использовать централизованные решения: LDAP/AD + RADIUS (например, FreeRADIUS с Google Authenticator), или SSO-провайдеры с поддержкой SSH (через прокси).
  • Если хотите требовать одновременно ключ и 2FA, используйте директиву AuthenticationMethods, как показано выше.

Резервные варианты и восстановление доступа

  • Сохраняйте аварийные (scratch) коды, которые выводит google-authenticator при генерации; каждый код применяется один раз.
  • Экспорт секретного ключа или QR-кода в защищённое хранилище (например, зашифрованный сейф) позволит восстановить доступ на новом устройстве.
  • Для критичных серверов организуйте отдельный аккаунт с доступом по ключу (и храните ключ в защищённом месте) на случай, если основной метод восстановления недоступен.

Рольовые чеклисты

Чеклист для администратора:

  • Синхронизировать время на сервере (systemd-timesyncd / chrony / ntp).
  • Установить libpam-google-authenticator.
  • [ ] Запустить google-authenticator для каждого пользователя (или подготовить инструкцию для пользователей).
  • Обновить /etc/pam.d/sshd и /etc/ssh/sshd_config.
  • Если нужно — настроить AuthenticationMethods для связки publickey + 2FA.
  • Перезапустить sshd и протестировать вход из новой сессии.
  • Развернуть инструкцию по восстановлению для пользователей.

Чеклист для пользователя:

  • Сгенерировать секретный ключ на сервере (google-authenticator).
  • Сохранить резервные коды в безопасном месте.
  • Добавить ключ в приложение (Google Authenticator / Authy / другой совместимый TOTP-клиент).
  • Проверить вход в новую SSH-сессию.

Руководство выполнения задачи (Playbook)

Шаги для быстрой настройки на новом сервере:

  1. Обновить пакеты:
sudo apt update && sudo apt upgrade -y
  1. Установить и запустить sync времени при необходимости.

  2. Установить пакет libpam-google-authenticator:

sudo apt install libpam-google-authenticator -y
  1. Для каждого пользователя выполнить google-authenticator и собрать ключи.

  2. Настроить PAM и sshd, как описано выше.

  3. Перезапустить sshd и проверить доступ.

Частые проблемы и их решения

  • Проблема: одноразовый код не проходит.
    • Проверьте синхронизацию времени между сервером и устройством. На клиенте и сервере часы должны быть точными.
  • Проблема: вход по ключу обходил 2FA.
    • По умолчанию publickey может обходить keyboard-interactive. Чтобы этого избежать, настройте AuthenticationMethods publickey,keyboard-interactive.
  • Проблема: блокировка пользователей после внедрения PAM.
    • Держите открытую админ-сессию на сервере, пока не подтвердите, что новые логины работают. Имеете план отката (SSH-консоль через облачный провайдер или доступ по KVM).

Матрица рисков и способы смягчения

  • Потеря устройства с ключами — риск: высокий. Смягчение: хранение резервных кодов, экспорт секретов в защищённый сейф, многоступенчатая проверка при восстановлении.
  • Синхрон времени — риск: средний. Смягчение: использовать ntp/chrony и увеличить окно проверок (window).
  • Брутфорс одноразовых кодов — риск: низкий при rate-limiting. Смягчение: включить rate-limiting и запрет многократного использования токена.

Когда 2FA через libpam-google-authenticator не подходит

  • Если в организации требуется аппаратный U2F-токен (YubiKey) — используйте pam_u2f или pam_yubico.
  • Для централизованного управления учётными записями и политиками предпочтительнее решения через RADIUS/LDAP.

Критерии приёмки

  • Удалённый вход по SSH для учётной записи, где был выполнен google-authenticator, требует одноразового кода.
  • Резервные коды сгенерированы и доступны администратору/пользователю в безопасном месте.
  • При настройке AuthenticationMethods вход по ключу без 2FA невозможен.

Советы по безопасности

  • Не отключайте логирование попыток входа (journalctl/secure). Анализ логов помогает обнаружить атаки.
  • Регулярно проверяйте /home/*/.google_authenticator на предмет неожиданных изменений.
  • По возможности комбинируйте 2FA с ограничением доступа по IP, fail2ban и строгими правами sudo.

Часто задаваемые вопросы

Я использую YubiKey. Могу ли я использовать 2FA с SSH по этому сценарию?

Нет. Модуль libpam-google-authenticator работает с TOTP (временными одноразовыми кодами) и рассчитан на стандартные приложения (Google Authenticator, Authy и др.). Для YubiKey используйте соответствующие PAM-модули, например pam_u2f или pam_yubico.

Могу ли я использовать тот же ключ аутентификации на другом телефоне?

Да. Достаточно иметь секретный ключ или QR-код. Перед переносом убедитесь, что удалили ключ со старого устройства, чтобы уменьшить риск компрометации.

Можно ли использовать другое приложение для 2FA?

Да. Любое приложение, поддерживающее стандарт TOTP/HOTP (в т.ч. Authy, FreeOTP и др.), будет работать с libpam-google-authenticator.

Заключение

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

Image credit: Unsplash. All alterations and screenshots by Ramces Red.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро