MAATRIX / Блог / Двухфакторная аутентификация (2FA) для SSH

Двухфакторная аутентификация (2FA) для SSH

Блог MAATRIX · 2026-07-07

Даже украденный ключ бесполезен, если для входа нужен второй фактор — одноразовый код из приложения. Настроим 2FA для SSH через TOTP и PAM.

Зачем 2FA поверх ключей

['SSH-ключ — сильная защита, но если закрытый ключ утечёт с ноутбука (кража, вредонос, забытый в облаке файл), доступ получит и злоумышленник. Второй фактор в виде TOTP-кода из Google Authenticator, Aegis или аналога добавляет барьер, который невозможно украсть удалённо: код генерируется на вашем телефоне и меняется каждые 30 секунд.', 'Для критичных серверов — с платёжными данными, персональными данными пользователей, доступом к инфраструктуре — двухфакторная аутентификация стала фактическим стандартом. Реализуется она через модуль PAM libpam-google-authenticator. На VPS MAATRIX с полным root-доступом настройка занимает несколько минут и не требует внешних сервисов или интернет-зависимостей в момент входа.', 'Смысл 2FA — в независимости факторов: что-то, чем вы владеете (ключ), плюс что-то, что генерирует ваш телефон (код). Компрометация одного фактора не даёт доступа, пока цел второй. Даже если злоумышленник скопирует ваш закрытый ключ, без телефона с генератором кодов он не пройдёт дальше первого шага.']

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.

Арендовать VPS с root-доступом

Шаг 1: установка и привязка

['Ставим PAM-модуль и генерируем секрет для пользователя. Запускайте команду под своей рабочей учёткой, а не под root — секрет должен принадлежать тому, кто будет логиниться.', '
apt install libpam-google-authenticator -y\ngoogle-authenticator
', 'Утилита задаст несколько вопросов. Отвечайте y на time-based токены, обновление файла конфигурации, ограничение частоты попыток и сужение окна времени. Она покажет QR-код и секретный ключ — отсканируйте код приложением-аутентификатором и обязательно сохраните резервные (scratch) коды в надёжном месте: они спасут при потере телефона.']

Шаг 2: настройка PAM

['Подключаем модуль к сервису SSH. Откройте файл PAM для sshd и добавьте строку активации.', '
sudo nano /etc/pam.d/sshd
', '
auth required pam_google_authenticator.so
', 'Здесь есть выбор схемы. Если хотите строгую связку «ключ И код», закомментируйте в этом файле подключение @include common-auth, чтобы пароль не участвовал. Если же вам нужен вариант «пароль плюс код» — оставьте common-auth. Для максимальной защиты используют именно связку ключа и TOTP-кода.']

Шаг 3: настройка sshd

['Теперь включаем в самом sshd поддержку интерактивного запроса кода и указываем связку методов аутентификации.', '
sudo nano /etc/ssh/sshd_config
', '
KbdInteractiveAuthentication yes\nAuthenticationMethods publickey,keyboard-interactive\nUsePAM yes
', 'Строка AuthenticationMethods publickey,keyboard-interactive требует сначала успешной проверки ключа, а затем ввода кода 2FA — это и есть настоящий двухфакторный вход. Перезапускаем сервис, чтобы применить изменения:', '
sudo systemctl restart ssh
']

Проверка и защита от блокировки

['КРИТИЧЕСКИ ВАЖНО: не закрывайте текущую SSH-сессию, пока не проверите вход в новом окне терминала. Если что-то настроено неверно, у вас останется рабочее подключение для отката изменений.', '
ssh maat@SERVER_IP
', 'При правильной настройке сервер сначала примет ваш ключ, а затем спросит одноразовый код (Verification code). На всякий случай держите доступ к консоли через панель MAATRIX — это запасной вход, если 2FA настроена с ошибкой и SSH оказался закрыт. Именно наличие такого резервного канала делает эксперименты с аутентификацией безопасными.']

Частые ошибки

['
  • Закрыть единственную сессию до проверки нового входа и остаться без доступа.
  • Сбитое время на сервере — TOTP-коды перестают совпадать; синхронизируйте часы через NTP.
  • Не сохранить scratch-коды и потерять телефон, оставшись без второго фактора.
  • Запустить google-authenticator под root, а входить другим пользователем — секрет привязан к учётке.
  • Забыть про UsePAM yes, из-за чего модуль не подключается.
', 'Синхронизация времени решает большинство проблем с несовпадающими кодами — TOTP жёстко завязан на текущее время:', '
timedatectl set-ntp true\ntimedatectl status
']

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.

Арендовать VPS с root-доступом

Частые вопросы

2FA нужна, если уже есть ключ с passphrase?

Для критичных серверов — да. Passphrase защищает файл ключа локально, а 2FA добавляет независимый фактор, который нельзя украсть вместе с ключом удалённо.

Что если потерял телефон с кодами?

Используйте сохранённые scratch-коды для входа, затем перегенерируйте секрет заново. Запасной доступ через консоль панели MAATRIX также поможет восстановиться.

Почему коды не подходят?

Чаще всего рассинхронизировано время на сервере или телефоне. Включите NTP командой timedatectl set-ntp true и проверьте корректность часового пояса.