A partir do OpenSSH 6.2 , a opção de usar um programa externo para autenticação baseada em pares de chaves está disponível com AuthorizedKeysCommand
.
De acordo com a página de manual sshd_config
, este programa deve retornar zero ou mais linhas de authorized_keys
output.
Assumindo que o programa configurado retorna várias chaves, existe uma maneira (downstream em, digamos, o ForceCommand
) para determinar qual das chaves retornadas foi usada para autenticar?
Por exemplo, isso funciona muito bem se você tiver um usuário separado para cada chave. No entanto, se você estiver compartilhando um usuário (por exemplo, 'git') e desejar usar um daemon wide ForceCommand
(configurado no sshd_config), perderá o contexto de qual usuário identificado externamente e qual chave foi usada para autenticar.
O Gitlab (e a Gitosis) faz algo semelhante, onde compartilha um usuário 'git', mas mantém o arquivo authorized_keys
em associa um argumento de linha de comando key_id
com sua opção command=
, que permite que eles determinem as permissões externamente. Isto parece ser como eles ligam a autenticação da chave com o comando force.
Essa solução funciona muito bem em uma escala menor, mas parece um pesadelo para escalar para muitos milhões de usuários que, digamos, o Github.
As instalações SSH de grande escala e altamente disponíveis executam sua própria versão bifurcada do OpenSSH? Eu não vejo uma maneira de encadear AuthorizedKeysCommand
e ForceCommand
sem manter (como um animal) arquivos em uma configuração do OpenSSH.
Agradecemos antecipadamente por sua ajuda!