Помимо подписи SSH-сертификатов (режим CA), механизм секретов SSH поддерживает режим одноразовых паролей (OTP). В этом режиме Stronghold выдаёт клиенту одноразовый пароль для входа на конкретный хост, а агент на удалённом хосте проверяет этот пароль через Stronghold при входе пользователя.
Особенности режима OTP:
- пароль действует для одного входа и одного IP-адреса;
- на каждом удалённом хосте необходим агент, который проверяет OTP через эндпоинт
verifyмеханизма секретов SSH; - Stronghold не хранит и не распространяет SSH-ключи.
Для режима OTP на удалённых хостах требуется агент, совместимый с эндпоинтом ssh/verify (например, помощник SSH, интегрированный с PAM). Установка и настройка агента не входят в эту документацию.
Настройка
Включите механизм секретов SSH, если он ещё не включён:
d8 stronghold secrets enable sshСоздайте роль с типом ключа
otp:d8 stronghold write ssh/roles/otp-role key_type=otp default_user=ubuntu cidr_list=10.0.0.0/24 exclude_cidr_list=10.0.0.1/32 allowed_users="ubuntu,deploy" port=22Параметры роли для режима OTP:
Параметр Описание key_typeТип ключа: otpилиca. Для этого режима —otp.default_userИмя пользователя по умолчанию на удалённом хосте. Обязателен для типа otp.cidr_listСписок CIDR-блоков через запятую, для хостов из которых применяется роль. exclude_cidr_listСписок CIDR-блоков через запятую, IP-адреса из которых роль не принимает. allowed_usersСписок пользователей, для которых можно запросить OTP. Значение *разрешает любого пользователя.portПорт SSH, который возвращается клиенту вместе с OTP. На генерацию OTP не влияет. По умолчанию 22.Если роль должна выдавать OTP для любого IP-адреса, добавьте её в список ролей с нулевым адресом. Ранее заданные для этих ролей CIDR-блоки будут игнорироваться:
d8 stronghold write ssh/config/zeroaddress roles="otp-role"Настройте на удалённых хостах агент, который проверяет OTP через Stronghold.
Использование
Запросите одноразовый пароль для хоста:
d8 stronghold write ssh/creds/otp-role ip=10.0.0.15 username=ubuntuЕсли
usernameне указан, используетсяdefault_userроли. В ответе возвращается одноразовый пароль, имя пользователя, IP-адрес и порт.Подключитесь к хосту по SSH и введите полученный OTP в качестве пароля. Агент на хосте проверит его через эндпоинт
ssh/verify, после чего пароль станет недействительным.
Чтобы узнать, какие роли применимы к IP-адресу, используйте эндпоинт lookup:
d8 stronghold write ssh/lookup ip=10.0.0.15Пример политики
Политика, которая разрешает получать OTP только для роли otp-role:
path "ssh/creds/otp-role" {
capabilities = ["create", "update"]
}Полный список эндпоинтов и параметров приведён в справочнике API механизмов секретов.