Em resumo:
Gostaria de uma maneira de fazer autenticação de chave SSH via LDAP.
Problema:
Usamos LDAP (slapd) para serviços de diretório e recentemente passamos a usar nossa própria AMI para criar instâncias. A razão pela qual o bit AMI é importante é que, idealmente , gostaríamos de poder fazer login com SSH via autenticação de chave assim que a instância estiver em execução e não precisar esperar que nossa ferramenta de gerenciamento de configuração um tanto lenta inicie um script para adicionar as chaves corretas para a instância.
O cenário ideal é que, ao adicionar um usuário ao LDAP, também adicionemos sua chave e eles possam efetuar login imediatamente.
Autenticação de chave é uma obrigação , porque o login baseado em senha é tanto menos seguro e incômodo.
Eu li esta pergunta que sugere que há um patch para o OpenSSH chamado OpenSSH-lpk para fazer isso, mas isso não é mais necessário com o servidor OpenSSH> = 6.2
Adicionada uma opção sshd_config (5) AuthorizedKeysCommand para oferecer suporte à busca de chaves_computadas de um comando, além de (ou em vez de) do sistema de arquivos. O comando é executado em uma conta especificada por uma opção AuthorizedKeysCommandUser sshd_config (5)
Como posso configurar o OpenSSH e o LDAP para implementar isso?
AuthorizedKeysCommandUser nobody
vez de fazer root.ldapsearch -u -LLL -o ldif-wrap=no '(&(objectClass=posixAccount)(uid='"$1"'))' 'sshPublicKey' | sed -n 's/^[ \t]*sshPublicKey:[ \t]*\(.*\)/\1/p'
AuthorizedKeysCommandRunAs
e nãoAuthorizedKeysCommandUser
Para quem está recebendo o erro ao executar o ldapsearch:
como eu estava (no FreeBSD), a correção é mudar o primeiro comando sed para:
(adicionando um ponto e vírgula após o 'd').
fonte
Só queria compartilhar meu "método", meu lado do cliente é específico do Debian / Ubuntu, mas o meu lado do servidor é basicamente o mesmo que acima, mas com um pouco mais de "HowTo:"
Servidor :
Ativar atributo de chave pública:
Crédito:
https://blog.shichao.io/2015/04/17/setup_openldap_server_with_openssh_lpk_on_ubuntu.html
Agora use isso para adicionar ldif:
Adicionando um usuário com chave pública SSH no phpLDAPadmin
Primeiro, crie um usuário com o modelo "Genérico: conta de usuário". Em seguida, vá para a seção de atributo "objectClass", clique em "adicionar valor" e escolha o atributo "ldapPublicKey". Após o envio, volte para a página de edição do usuário, clique em "Adicionar novo atributo" na parte superior e escolha "sshPublicKey", cole a chave pública na área de texto e, finalmente, clique em "Atualizar Objeto". "
O atributo sshPublicKey não está sendo exibido - autenticação de chave SSH OpenLDAP PHPLDAP
Cliente Ubuntu:
Crie chaves de teste:
fonte
Esta não é uma resposta completa, apenas uma adição à resposta de c4urself . Eu teria adicionado isso como um comentário, mas não tenho reputação suficiente para comentar, portanto, não faça voto negativo!
Este é o script que estou usando para
AuthorizedKeysCommand
(com base na versão do c4urself). Funciona independentemente de o valor ser retornado na codificação base64 ou não. Isso pode ser especialmente útil se você deseja armazenar várias chaves autorizadas no LDAP - basta separar as chaves com caracteres de nova linha, semelhantes ao arquivo allowed_keys.fonte