По состоянию на 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 за направление!