Назад | Перейти на главную страницу

Определите, какой ключ успешно используется для аутентификации с помощью AuthorizedKeyCommands

По состоянию на OpenSSH 6.2, возможность использовать внешнюю программу для аутентификации на основе пары ключей доступна с AuthorizedKeysCommand.

Согласно sshd_config страница руководства, эта программа должна вернуть ноль или более строк authorized_keys вывод.

Предполагая, что настроенная программа возвращает несколько ключей, есть ли способ (ниже по потоку, скажем, ForceCommand), чтобы определить, какой из возвращенных ключей использовался для аутентификации?

Например, это отлично работает, если у вас есть отдельный пользователь для каждой клавиши. Однако, если вы разделяете пользователя (например, git) и хотите использовать весь демон ForceCommand (настроенный в sshd_config), вы теряете контекст того, какой внешне идентифицированный пользователь и какой ключ использовался для аутентификации.

Gitlab (и Gitosis) делает нечто подобное, когда разделяет пользователя git, но поддерживает authorized_keys файл в ассоциировать key_id аргумент командной строки с их command= вариант это позволяет им затем определять разрешения извне. Это похоже на то, как они связывают ключевую аутентификацию с командой force.

Это решение отлично работает в меньшем масштабе, но кажется кошмаром для многих миллионов пользователей, которые, скажем, есть у Github.

Используются ли крупномасштабные высокодоступные установки SSH с собственной разветвленной версией OpenSSH? Я не вижу способа связать AuthorizedKeysCommand и ForceCommand без поддержки (как животное) файлов в ванильной настройке OpenSSH.

Заранее спасибо за вашу помощь!

В AuthorizedKeysCommand описание в sshd_config

должен выдавать на стандартный вывод ноль или более строк вывода authorized_keys

Это означает, что вы можете создать command= вариант завершен с аргументами командной строки (или любым другим допустимым authorized_key вариант).

Например, динамически генерируемая строка может выглядеть примерно так:

no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="/path/to/program arg1 arg2 arg3'" ssh-rsa bigHugeLongLongKey alias

Спасибо @kasperd за направление!