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

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

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

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

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

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

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

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

Заранее спасибо за Вашу справку!

1
задан 24 March 2015 в 18:33
1 ответ

Описание AuthorizedKeysCommand в sshd_config

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

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

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

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

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

0
ответ дан 4 December 2019 в 07:57

Теги

Похожие вопросы