Melhor sistema para gerenciar chaves ssh? [fechadas]

40

Tenho vários computadores clientes (por exemplo, laptops, desktops, etc.) e conecto-me a várias máquinas servidor que gerencio e faço login em todas elas por meio do SSH. Eu posso imaginar vários esquemas de gerenciamento de chaves ssh que fariam sentido, e estou curioso sobre o que os outros fazem.

Opção 1: um par de chaves pública / privada global.

Eu geraria um par de chaves público / privado e colocaria a chave privada em cada máquina cliente e a chave pública em cada máquina servidor.

Opção 2: um par de chaves por máquina servidora.

Eu geraria um par de chaves em cada máquina servidor e colocaria cada chave privada em minhas máquinas clientes.

Opção 3: um par de chaves por máquina cliente.

Cada máquina cliente teria uma chave privada exclusiva e cada máquina servidor teria as chaves públicas para cada máquina cliente que eu gostaria de conectar.

Opção 4: um par de chaves por par cliente / servidor

Totalmente ao mar?

Qual destes é o melhor? Existem outras opções? Quais critérios você usa para avaliar a configuração correta?

    
por slacy 27.05.2009 / 22:32

5 respostas

32

Eu uso Opção 3: Um par de chaves por máquina cliente e isso faz mais sentido para mim. Aqui estão algumas das razões:

  • Se um cliente for comprometido, essa chave (e somente essa chave) precisará ser removida dos servidores.
  • É flexível o suficiente para decidir o que posso acessar de onde, sem conceder acesso geral a todos os servidores de todos os clientes.
  • Muito conveniente. Há apenas 1 chave para ssh-add, sem confusão.
  • Fácil de configurar e administrar na Opção 4

A opção 4 é boa, mas é muito trabalho. A opção 3 leva você a 98% com muito menos problemas.

    
por 27.05.2009 / 22:44
26

Eu uso uma solução que é um pouco mais complicada, mas muito versátil, pois quero manter alguma separação nas chaves de identidade SSH usadas para meus servidores de rede doméstica, servidores de escritório, servidores de rede de clientes de consultoria e outros sistemas em que tenho contas.

Agora que falei, trabalho em estações de trabalho Linux quase exclusivamente, por isso tenho uma chave USB que é configurada usando a criptografia LUKS e meu gerenciador de janelas X11 junto com o daemon HAL detectam a unidade criptografada LUKS e solicitam a frase secreta de descriptografia quando ela é inserida e tentou ser montado. Ao armazenar isso em uma unidade criptografada do jeito que eu faço, eu nunca armazeno minhas chaves SSH em qualquer estação de trabalho.

Eu, então, tenho a seguinte configuração no meu arquivo ~/.ssh/config :

Host *
    Protocol 2
    IdentityFile %d/.ssh/keys.d/id_rsa.%l
    IdentityFile %d/.ssh/keys.d/id_dsa.%l
    IdentityFile %d/.ssh/keys.d/%u@%l

O % d é traduzido para ser o diretório home do usuário pelo OpenSSH e no diretório ~ / .ssh que criei keys.d como um link simbólico para o caminho do diretório na unidade USB criptografada quando estiver devidamente montado.

A expressão % l é traduzida para ser o nome do host das máquinas clientes locais e % u será traduzida para o nome de usuário do cliente local.

O que esta configuração faz é permitir que o SSH procure uma chave usando 3 expressões diferentes. Por exemplo, se o nome de usuário do meu cliente local for jdoe e o nome da minha máquina cliente local for examplehost , a ordem seguinte será encontrada até que encontre uma chave que tenha sido aceita pelo servidor remoto.

/home/jdoe/.ssh/keys.d/id_rsa.examplehost
/home/jdoe/.ssh/keys.d/id_dsa.examplehost
/home/jdoe/.ssh/keys.d/jdoe@examplehost

Você pode até usar a expressão % r para procurar uma chave específica para o nome de usuário do servidor remoto ou % h para o nome do host do servidor remoto como % u e % l foram usados.

Atualização: Agora eu realmente utilizo o gnuPG-gpg-agent com compatibilidade ssh-agent para apenas ler e usar a chave de autenticação do meu smartcard OpenPGP v2.

    
por 11.06.2009 / 02:14
6

Eu eliminaria ambas as suas opções 1s (das quais eu suspeito que uma delas deveria ser a opção 2 ;-) porque as chaves privadas são dados sensíveis, e faz sentido mantê-las no menor número de lugares possível. Eu pessoalmente nunca copiaria uma chave privada de um computador para outro (ou mesmo de um arquivo para outro no mesmo computador), exceto talvez para fazer backups. Embora, ao contrário da maioria das chaves de criptografia, se uma chave SSH se perder, ela não é o fim do mundo (basta criar uma nova, você não perde nenhum dado).

    
por 27.05.2009 / 23:07
1

Opção 3 e use algo como Puppet para lidar com o gerenciamento de chaves.

    
por 27.05.2009 / 23:41
1

Opção 3.

Isso também permite controlar quais servidores um cliente pode acessar. por exemplo. se o cliente X precisar de acesso aos servidores A e B, mas C ou D, você copiará sua chave pública para apenas esses hosts.

    
por 31.05.2009 / 06:10