SSH OTP
Добавьте одноразовые коды на основе времени для входа по SSH с помощью Linux PAM и модуля PAM Google Authenticator.
Перед выполнением
В этом примере Ubuntu устанавливается дополнительный модуль PAM и изменяется аутентификация сервера. Оставьте существующий административный сеанс и независимую консоль или доступ для восстановления открытыми. Настройте и протестируйте каждую учетную запись перед применением; надежно храните секретные и аварийные коды OTP и никогда не публикуйте их. Синхронизируйте часы сервера. Убедитесь, что ваш SSH-клиент поддерживает интерактивные запросы с клавиатуры и что учетные записи автоматизации и восстановления остаются работоспособными. Пример стека PAM сохраняет общую аутентификацию, для которой может потребоваться системный пароль, а также OTP: открытый ключ плюс интерактивная клавиатура сами по себе не гарантируют ровно два запроса или ровно два фактора. PAM-файлы, политики и имена служб различаются в зависимости от дистрибутива; не применяйте этот пример без изменений к серверам macOS или Windows.
После применения изменений проверьте в новом сеансе SSH вход и ожидаемую работу. Оставьте текущий сеанс открытым до успешной проверки, чтобы при необходимости восстановить конфигурацию.
Приложения-аутентификаторы
Используйте приложение TOTP на телефоне, чтобы отсканировать QR-код регистрации или ввести секрет вручную. Защитите QR-код и секрет и храните аварийные коды восстановления в надёжном месте. Приложение работает отдельно от модуля PAM на сервере.
- 2FAS Рекомендуется
- Google Authenticator
- Microsoft Authenticator
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_configUsePAM 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.comSecure Pipes поддерживает запросы SSH keyboard-interactive для ввода кода сервера. Этот OTP отличается от OTP разблокировки приложения. Общий секрет OTP находится на сервере и в приложении-аутентификаторе; Secure Pipes не требуется сохранять его для такого входа.
Официальные источники
Проверено 27 октября 2026 г.