К основному содержимому

Двухфакторная аутентификация для SSH и веб-панелей

Безопасность · 19.04.2026 · 4 мин чтения
Иллюстрация к статье «Двухфакторная аутентификация для SSH и веб-панелей»

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

2FA для SSH через Google Authenticator

apt install libpam-google-authenticator -y
# Настроить для каждого пользователя (запустить от пользователя!)
su - admin
google-authenticator
# Ответить Y, Y, N, Y, Y
# Отсканировать QR-код в Authy/Google Authenticator

Настройка PAM и sshd_config

# /etc/pam.d/sshd
auth required pam_google_authenticator.so

# /etc/ssh/sshd_config
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
# (требует ключ И одноразовый код)

systemctl reload sshd

Коды экстренного восстановления

При настройке google-authenticator сохраните резервные коды восстановления (emergency scratch codes) в надёжном месте. Без них при утере телефона вы потеряете доступ к серверу.
# Расположение файла 2FA пользователя
cat ~/.google_authenticator
# Первая строка — секретный ключ
# Строки с ** — коды восстановления (одноразовые)

2FA для WordPress

Установите плагин WP 2FA или Two Factor Authentication:

  1. Установить плагин из WordPress Repository
  2. Включить для всех администраторов в настройках плагина
  3. Каждый пользователь настраивает свой TOTP при следующем входе

2FA для ISPmanager 6

# ISPmanager поддерживает 2FA через TOTP
# Настройки → Профиль → Двухфакторная аутентификация
# Или через API:
# POST /api/ispmgr/totp.set с параметрами пользователя

Поддерживаемые приложения-аутентификаторы

ПриложениеПлатформаОсобенности
AuthyiOS, Android, DesktopСинхронизация между устройствами
Google AuthenticatoriOS, AndroidПростота, без синхронизации
Microsoft AuthenticatoriOS, AndroidОблачный бэкап
Bitwarden (Premium)ВсеВстроен в менеджер паролей
1PasswordВсеВстроен в менеджер паролей
Рекомендация: Используйте Authy или сохраняйте TOTP-секрет в менеджере паролей (Bitwarden, 1Password). Это позволит восстановить 2FA при потере телефона без кодов восстановления.

Типичные ошибки 2FA

СимптомПричинаЧто делать
Invalid verification code при верно введённом кодеРассинхронизация системного времени сервера — TOTP чувствителен к сдвигу более 1–2 минутСинхронизируйте время: timedatectl set-ntp true и проверьте timedatectl status
PAM authentication failure в auth.log при верном кодеСтрока pam_google_authenticator.so стоит в неверном порядке относительно pam_unix.so или common-authРазместите её выше @include common-auth в /etc/pam.d/sshd и перезапустите sshd
Пользователь потерял телефон, коды восстановления не сохраненыФайл ~/.google_authenticator привязан к устройству, резервных кодов нетДругой администратор входит по SSH-ключу и удаляет/пересоздаёт файл 2FA для пользователя
Time out of sync в приложении-аутентификатореЧасы смартфона разошлись с реальным временемВключите автоматическую синхронизацию времени в настройках телефона

Сравнение методов второго фактора

МетодЗащита от фишингаНужна поддержка на сервере
TOTP (Google Authenticator)Нет — код можно перехватить и ввести вручную на поддельной страницеНет, достаточно PAM-модуля
SSH-сертификаты (CA)Да, привязаны к паре ключей, а не к вводимому кодуДа, нужен собственный центр сертификации
U2F / WebAuthn (для веб-панелей)Да, криптографически привязан к домену — не сработает на фишинговом сайтеДа, поддержка должна быть в самой панели и браузере

Когда 2FA не подходит

  • Автоматические скрипты и cron-задачи, использующие SSH-ключ без интерактивной сессии — TOTP через AuthenticationMethods заблокирует такой вход
  • Крупная распределённая команда с частой сменой состава — управлять централизованно проще через SSH-сертификаты, а не личные TOTP-секреты каждого
  • Аварийный сценарий без второго администратора с доступом — если единственный человек с 2FA потерял телефон и коды, восстановление потребует доступа через консоль хостинг-провайдера
  • Тестовый VPS с низкой ценностью данных для личных экспериментов — дополнительный шаг входа не оправдан рисками

Базовая настройка sshd_config, на которую опирается эта схема, разобрана в статье «SSH Hardening: безопасная настройка сервера от взлома». Для веб-панелей вроде cPanel есть отдельный разбор в статье «Двухфакторная аутентификация в cPanel: настройка 2FA».

Проверка результата

Убедитесь, что 2FA реально требуется при входе, а не просто настроена:

# Проверить, что вход по одному ключу без TOTP отклоняется
ssh -o PreferredAuthentications=publickey user@server
# Ожидается запрос verification code, а не мгновенный вход

# Права на файл секрета должны быть закрыты от других пользователей
stat -c "%a %n" ~/.google_authenticator

# Проверить активные методы аутентификации в текущей конфигурации
sshd -T | grep -i authenticationmethods

Если нужен более устойчивый к краже ключей вариант входа для команды, стоит посмотреть на «SSH-сертификаты: вход через центр сертификации».

Статья помогла?
← Назад в базу знаний Задать вопрос поддержке