SSH OTP

Добавьте одноразовые коды на основе времени для входа по SSH с помощью Linux PAM и модуля PAM Google Authenticator.

Перед выполнением

В этом примере Ubuntu устанавливается дополнительный модуль PAM и изменяется аутентификация сервера. Оставьте существующий административный сеанс и независимую консоль или доступ для восстановления открытыми. Настройте и протестируйте каждую учетную запись перед применением; надежно храните секретные и аварийные коды OTP и никогда не публикуйте их. Синхронизируйте часы сервера. Убедитесь, что ваш SSH-клиент поддерживает интерактивные запросы с клавиатуры и что учетные записи автоматизации и восстановления остаются работоспособными. Пример стека PAM сохраняет общую аутентификацию, для которой может потребоваться системный пароль, а также OTP: открытый ключ плюс интерактивная клавиатура сами по себе не гарантируют ровно два запроса или ровно два фактора. PAM-файлы, политики и имена служб различаются в зависимости от дистрибутива; не применяйте этот пример без изменений к серверам macOS или Windows.

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

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

Используйте приложение TOTP на телефоне, чтобы отсканировать QR-код регистрации или ввести секрет вручную. Защитите QR-код и секрет и храните аварийные коды восстановления в надёжном месте. Приложение работает отдельно от модуля PAM на сервере.

2FAS поддерживает необязательное резервное копирование; синхронизация между устройствами доступна в Premium. Доступность зависит от платформы и тарифа.

Примеры

Установите модуль PAM в Ubuntu. Модуль отделен от OpenSSH и требует прав администратора.

sudo apt update
sudo apt install libpam-google-authenticator

Запустите инструмент регистрации для каждой учетной записи, которая будет использовать OTP. Следуйте интерактивным подсказкам, добавьте учетную запись в приложение для проверки подлинности и надежно сохраните коды экстренной помощи. Не делитесь и не регистрируйте отображаемый секрет.

google-authenticator

В существующий файл службы SSH PAM (обычно /etc/pam.d/sshd) добавьте модуль в качестве правила аутентификации, сохранив при этом все существующие правила учетной записи, сеанса и другие. Этот фрагмент сохраняет общую авторизацию; ваша политика PAM также может запрашивать системный пароль. Не добавляйте nullok, когда требуется OTP.

Откройте файл в nano:

sudo nano /etc/pam.d/sshd
@include common-auth
auth required pam_google_authenticator.so

Объедините эти настройки с действующей конфигурацией SSH-сервера. Для этого требуется открытый ключ и интерактивная аутентификация с помощью клавиатуры PAM; существующие блоки «Порядок включения» или «Сопоставление» могут изменить результат. Не перезаписывайте всю конфигурацию.

Откройте файл в nano:

sudo nano /etc/ssh/sshd_config
UsePAM yes
PubkeyAuthentication yes
KbdInteractiveAuthentication yes
PasswordAuthentication no
AuthenticationMethods publickey,keyboard-interactive:pam

Проверьте синтаксис и проверьте действующую политику перед применением процедуры перезагрузки службы SSH системы. Используйте sshd -T -C с соответствующим пользователем и адресом, если применяются правила сопоставления. В отдельном сеансе проверьте ключ и все запрашиваемые факторы перед закрытием исходного сеанса.

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

Дополнительно: открытый ключ и OTP

Чтобы после ключа запрашивать OTP без пароля учётной записи, настройте правила auth PAM для SSH. Удаление common-auth из PAM-службы SSH затронет все её учётные записи и может обойти другие политики. Проверьте остальные правила auth с администратором; сохраните правила account и session, текущий сеанс и независимый способ восстановления.

Это пример фрагмента auth для Ubuntu, а не полный файл PAM. Закомментируйте common-auth только после проверки последствий. Не добавляйте nullok. Другие правила auth могут потребовать дополнительные факторы.

Откройте файл в nano:

sudo nano /etc/pam.d/sshd
# /etc/pam.d/sshd: auth fragment only
# @include common-auth
auth required pam_google_authenticator.so

После объединения настроек SSH выше проверьте действующие значения. Ключи в выводе записаны строчными буквами. Порядок Include и блоки Match могут изменить результат; для Match используйте sshd -T -C с данными соединения.

sudo sshd -T | grep -E '^(usepam|pubkeyauthentication|kbdinteractiveauthentication|passwordauthentication|authenticationmethods) '

Проверьте и перезагрузите конфигурацию, как указано выше. Из отдельного сеанса клиента подключитесь зарегистрированной учётной записью с закрытым ключом и введите код. Убедитесь, что вход без требуемого ключа или кода невозможен, прежде чем закрывать исходный сеанс.

ssh -i ~/.ssh/id_ed25519 alice@server.example.com

Secure Pipes поддерживает запросы SSH keyboard-interactive для ввода кода сервера. Этот OTP отличается от OTP разблокировки приложения. Общий секрет OTP находится на сервере и в приложении-аутентификаторе; Secure Pipes не требуется сохранять его для такого входа.

Официальные источники

Проверено 27 октября 2026 г.