Top.Mail.Ru
OSEN-НИЙ SAAALEСкидка 50% на виртуальный хостинг и VDS
до 30.11.2025 Подробнее
Выберите продукт

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

Добавляем 2FA в SSH: к ключу или паролю требуем одноразовый код (TOTP) через PAM. Пошаговые команды для Debian-based, RHEL-based и Arch, выбор политики (ключ+код, пароль+код или оба варианта), безопасная проверка и диагностика без риска «запереть» доступ.
Настройка двухфакторной аутентификации (2FA) для SSH в Linux

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

Если SSH ещё не установлен/не укреплён, сначала пройдите нашу базовую инструкцию: «SSH в Linux: установка, подключение, ключи и безопасная настройка».

Перед началом — чтобы не запереть себя

  • Держите вторую SSH-сессию открытой на время настройки.
  • Проверяйте синтаксис перед перезапуском:
    sudo sshd -t && sudo systemctl reload sshd || sudo systemctl reload ssh
  • Иметь резервный доступ (консоль ВМ/панели, второй ключ/аккаунт).
  • Время на сервере должно быть точным (TOTP чувствителен): timedatectl status.
FastFox VDS
Облачный VDS-сервер в России
Аренда виртуальных серверов с моментальным развертыванием инфраструктуры от 195₽ / мес

Как включить 2FA в SSH: общая схема и шаги

Ниже показаны команды для Debian-based, RHEL-based и Arch. Мы подключим PAM-модуль TOTP, включим в sshd_config интерактивную аутентификацию и требование «два фактора», а затем активируем коды для нужных пользователей.

Шаг 1. Установить PAM-модуль для TOTP

Debian-based (Ubuntu, Debian, Astra):

sudo apt update
sudo apt install -y libpam-google-authenticator qrencode

RHEL-based (RHEL, AlmaLinux, Rocky, Fedora):

# На RHEL/Alma/Rocky может понадобиться EPEL:
# sudo dnf install -y epel-release
sudo dnf install -y google-authenticator-libpam qrencode

Arch Linux:

sudo pacman -S libpam-google-authenticator libqrencode

qrencode не обязателен, но удобен: покажет QR-код в терминале.


Шаг 2. Подключить PAM к SSH

Откройте файл /etc/pam.d/sshd и добавьте строку до общей auth-политики (то есть раньше строк типа @include common-auth / auth substack password-auth / auth include system-remote-login):

auth required pam_google_authenticator.so

Так 2FA (TOTP) станет обязательной для всех пользователей, у кого настроен SSH-вход.

Сделать 2FA не для всех (опционально):

Если хотите включать коды только выбранным пользователям, добавьте параметр nullok:

auth required pam_google_authenticator.so nullok

В этом случае у тех, у кого нет файла ~/.google_authenticator, запрос одноразового кода не появится.

Чтобы выключить 2FA для конкретного пользователя, просто уберите его файл с секретом:

mv ~/.google_authenticator ~/.google_authenticator.disabled

Шаг 3. Настроить политику входа в sshd_config

Откройте /etc/ssh/sshd_config и включите PAM + интерактивную стадию:

UsePAM yes
KbdInteractiveAuthentication yes     # новые версии OpenSSH
# ChallengeResponseAuthentication yes # для старых версий

Если вы нашли в файле один из этих параметров, измените их значения. Если их там нет, просто добавьте их в конец файла.

Дальше выберите один из вариантов политики (или объедините их):

Вариант A — ключ + TOTP (рекомендовано)

PubkeyAuthentication yes
PasswordAuthentication no
AuthenticationMethods publickey,keyboard-interactive

Чтобы после ввода одноразового кода не спрашивался пароль, в PAM-стеке для sshd в секции auth должна остаться только строка с pam_google_authenticator.so. Любые включения, которые подтягивают pam_unix.so (пароль проверки), нужно убрать только из auth. Секции account/session не трогаем.

Важно: PasswordAuthentication no отключает SSH-метод password, но не пароли внутри PAM. Если в auth остаётся pam_unix.so, sshd законно покажет Password: даже при запрете паролей.

Откройте файл /etc/pam.d/sshd, найдите нужную строку и поставьте перед ней знак комментария (#).

Debian-based (Ubuntu/Debian/Astra): /etc/pam.d/sshd

#@include common-auth


RHEL-based (RHEL/Alma/Rocky/Fedora): /etc/pam.d/sshd

# auth  substack   password-auth
# auth  include    password-auth


Arch Linux: /etc/pam.d/sshd

# auth  include    system-remote-login

Вариант B — пароль + TOTP

PubkeyAuthentication no
PasswordAuthentication yes
AuthenticationMethods password,keyboard-interactive

Вариант C — разрешить и ключ, и пароль, но всегда требовать TOTP

(«ИЛИ» между наборами методов задаётся пробелом)

PubkeyAuthentication yes
PasswordAuthentication yes
AuthenticationMethods publickey,keyboard-interactive password,keyboard-interactive

Применяем изменения:

sudo sshd -t && sudo systemctl reload sshd || sudo systemctl reload ssh

Шаг 4. Подключить 2FA конкретному пользователю

Команды выполняются от имени пользователя, которому включаем 2FA:

google-authenticator

В ответе на Time-based tokens? укажите y. Для получения кода отсканируйте QR-код или введите секрет/URL из мастера в приложении (Google Authenticator и др.).

Далее рекомендуемые ответы мастера:

  • Update ~/.google_authenticator? — y
  • Disallow multiple uses? — y
  • Rate limit? — y (например, 3 попытки за 30 сек)
  • Scratch codes — сохраните в надёжном месте.

Показать QR-код в терминале:

qrencode -t ANSIUTF8 < ~/.google_authenticator

Теперь при входе: сначала пройдёт ключ или пароль (по вашей политике), затем сервер спросит Verification code — введите 6-значный TOTP.

Проверка и диагностика

Тест клиента с подробностями

ssh -vvv user@SERVER_IP
# если у вас ключ + TOTP:
ssh -o PreferredAuthentications=publickey,keyboard-interactive user@SERVER_IP
# если пароль + TOTP:
ssh -o PreferredAuthentications=password,keyboard-interactive user@SERVER_IP

Типовые проблемы

Код не спрашивается. Проверьте UsePAM yes, KbdInteractiveAuthentication yes (или ChallengeResponseAuthentication yes) и AuthenticationMethods …,keyboard-interactive. Убедитесь, что строка pam_google_authenticator.so выше общих правил в /etc/pam.d/sshd. Логи:

sudo journalctl -u sshd -b

Permission denied (keyboard-interactive). Неверный код, расхождение времени или нет ~/.google_authenticator. Проверьте timedatectl, запустите google-authenticator заново.


Too many authentication failures. Агент предлагает слишком много ключей. Подключайтесь явно:

ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 user@SERVER_IP

После переустановки ВМ: “REMOTE HOST IDENTIFICATION HAS CHANGED!”

ssh-keygen -R SERVER_IP

Быстрый откат (если закрылись снаружи)

  • Через консоль ВМ закомментируйте строку PAM с pam_google_authenticator.so или временно упростите AuthenticationMethods (например, publickey).
  • Перезагрузите sshd, верните 2FA после проверки входа.

Заключение

Настройка двухфакторной аутентификации (2FA) для доступа к SSH — важный шаг к защите удалённых подключений. В этой статье мы прошли установку Google Authenticator (TOTP), настроили PAM и изменили параметры SSH-сервера так, чтобы требовать два фактора.

Теперь ваш SSH надёжнее защищён от перебора и несанкционированных входов. Связка ключ + TOTP даёт дополнительный уровень безопасности по сравнению с паролями, а вариант пароль + TOTP позволяет внедрить 2FA там, где ключи пока не используются.

Хотите безопасно протестировать изменения — поднимите окружение на наших облачных VDS: быстрое развёртывание, доступ к консоли и снапшоты для отката.

Поделиться статьей

Вам будет интересно

SSH в Linux: установка, подключение, ключи и безопасная настройка

SSH в Linux: установка, подключение, ключи и безопасная настройка

SSH в Linux на практике: ставим и запускаем, подключаемся, включаем ключевую аутентификацию и приводим sshd_config к безопасной ба ...
Порты в Linux: как проверить, открыть и закрыть (UFW, firewalld, nftables)

Порты в Linux: как проверить, открыть и закрыть (UFW, firewalld, nftables)

Пошаговый разбор портов в Linux: как увидеть, кто и где слушает, проверить доступ из сети и корректно открыть/закрыть через UFW, f ...
Как перейти от зарубежного хостинг-провайдера к Российскому: пошаговое руководство

Как перейти от зарубежного хостинг-провайдера к Российскому: пошаговое руководство

В современных условиях многие пользователи задумываются о переходе на российский хостинг. Этот процесс может показаться сложным, н ...