Determine qual chave é usada com sucesso para autenticação com AuthorizedKeyCommands

1

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!

    
por chadmaughan 24.03.2015 / 17:33

1 resposta

0

A descrição de AuthorizedKeysCommand no sshd_config

should produce on standard output zero or more lines of authorized_keys output

Isso significa que você pode gerar uma opção command= completa com argumentos de linha de comando (ou qualquer outra opção authorized_key válida).

Por exemplo, a linha gerada dinamicamente pode ser algo como:

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

Obrigado @kasperd pela direção!

    
por 24.03.2015 / 21:32

Tags