Automatize e crie chaves SSH para um grande número (quase 9000) de servidores para quase 30 usuários

1

Existe uma maneira de automatizar a criação de chaves SSH para grande número (quase 9000) de servidores para quase 30 usuários

    
por Gokul 10.10.2014 / 12:12

5 respostas

11

Se você tiver 9.000 servidores sob o mesmo gerenciamento, provavelmente terá alguma forma de gerenciamento de configuração Lugar, colocar. Isso pode ser na forma de Puppet, Chef, Ansible, etc. Você pode distribuir as chaves públicas dessa maneira.

Para 30 usuários, isso também é algo que pode ser tratado por meio da autenticação do diretório central (LDAP, Active Directory).

    
por 10.10.2014 / 12:20
10

Você provavelmente faz errado.

Cada usuário (dos 30) tem que criar sua própria chave (portanto, privada!). A chave pública de cada usuário vai para todos os servidores (dos 9000) aos quais ele deve ter acesso.

Não faça o contrário.

    
por 10.10.2014 / 12:19
8

Se seus servidores usarem versões recentes decentes (> 5.4, eu acho), você deve dar uma olhada na autenticação baseada em certificados. Você encontrará uma introdução a esse recurso aqui: link ou na documentação do pacote ssh.

Para simplificar,

  • usuários geram seu par de chaves privada / pública.
  • você (admin) cria um ou mais certificados de CA SSH (your-user-ca) que você usará para assinar as chaves públicas dos usuários.
  • você (admin) assina as chaves públicas dos usuários usando um certificado de CA. por exemplo, "ssh-keygen -s seu usuário-ca -I" nome de usuário "-Z nome de usuário -V + 52w user-key.pub". Isso cria um user-key-cert.pub que você precisa enviar de volta ao usuário apropriado.
  • você (admin) instala o certificado de CA SSH confiável na configuração sshd de seus servidores 9000. Você não precisa declarar cada chave pública de cada usuário.
  • os usuários podem se conectar.

hth.

    
por 10.10.2014 / 13:59
2

Eu utilizaria o Puppet para distribuir as chaves do host público para todas as máquinas, para que os usuários pudessem fazer login e não precisar manter um arquivo known_hosts (contanto que eles sejam SSHing nessas 9.000 máquinas).

Chaves do host:

  1. Faça com que cada nó crie uma chave pública / privada. É mais seguro gerar uma chave na máquina que a utiliza, assim a chave privada nunca sai do host e não precisa ser protegida.

  2. Use o recurso "recursos exportados" do Puppet para enviar a Chave Privada para um banco de dados central.

  3. Em todos os nós, insira os "recursos exportados" para gerar o arquivo de chaves do host conhecido nesta máquina. Qualquer novo nó aparecerá em todos os outros nós dentro de 2 fantoches.

Aqui está um exemplo de recursos exportados.

Aqui está um exemplo específico de distribuição de chaves de host SSH.

Acesso do usuário:

Você pode usar o Puppet para definir o arquivo sshd_config de cada host para confiar nas chaves do host e tal, ou o que você quiser que a política seja:

augeas { 'sshd_config': context => '/files/etc/ssh/sshd_config', changes => [ 'set PermitRootLogin without-password', 'set ANOTHERSETTING VALUE', ], }

Contas de usuário:

O Puppet também pode criar as 30 contas em todas as máquinas. Eu gosto do módulo de contas que acompanha o Puppet Enterprise. No entanto, é fácil fazer isso se você tiver a versão de código aberto. Veja um exemplo de como fazer isso .

Alguns conselhos gerais:

9.000 máquinas é um ambiente grande. Você desejará manter seus arquivos Puppet no Git, usar uma estrutura de Integração Contínua e testes, como o Jenkins CI, e ter um ambiente de teste para testar as coisas antes de pressionar. A forma como fazemos isso na Stack Exchange, Inc é documentada nesta postagem do blog .

    
por 11.10.2014 / 15:25
1
  1. Peça que cada usuário crie uma chave pública / privada.

  2. Distribuir a chave pública de cada usuário para cada servidor

  3. Lucro.

Além de brincar, esse é um problema clássico de gerenciamento de configuração. Considere que, além de publicar a chave, você também precisa, pelo menos, criar o diretório pessoal e as contas de usuário, bem como os diretórios .ssh individuais.

Em vez de tentar resolver todos os 30/9000 de uma só vez, começaria com a automação de um usuário em um servidor e a partir daí.

Veja em geral: Marionete , Chef , Sal , Ansible para ponteiros.

    
por 10.10.2014 / 17:11