Solução para chaves privadas em uma máquina remota?

2

Eu tenho que gerenciar vários servidores, com serviços que podem ser cron e trabalhos de integração, implantações, backups. O mais comum com tudo isso é que às vezes eles exigem acesso a outros servidores.

Problema : não quero espalhar minha chave privada para todos esses servidores por motivos óbvios.

Adoro o encaminhamento de agentes e o keychain.sh, mas isso exige que eu mantenha a conexão aberta o tempo todo nesses servidores.

Uma solução para isso pode ser colocar uma chave privada em apenas um servidor e manter as conexões abertas em todos os servidores remotos (com tmux / screen). Mas isso não é ideal.

Outra solução pode ser colocar uma senha muito strong na chave privada e distribuí-la nesses servidores, mas isso também não é o ideal.

Existem outras opções que eu estou negligenciando?

    
por moltar 25.02.2015 / 22:01

1 resposta

0

Eu posso pensar em duas maneiras verdadeiramente sem chave e sem senha, você pode fazer isso, embora ambos sejam sub-ótimos. Após a quebra de seção, mostrarei como isso é fácil com as chaves SSH.

Método 1: NFS ou algo parecido. Um sistema de arquivos comum permitiria que você despejasse arquivos em áreas dedicadas e, em seguida, os pegasse em tarefas cron dos sistemas relevantes. Isso é, no entanto, tão seguro quanto o seu sistema de arquivos de rede.

Método 2: RLOGIN. O SSH herda muito do RSH, o que permite que um usuário com o mesmo nome de usuário e senha (e sal?) Em diferentes sistemas se conecte diretamente a eles, sem necessidade de senha (basicamente, o hash de /etc/shadow é usado como prova). Não tenho certeza se o SSH pode fazer isso facilmente, e infelizmente não conheço nenhum guia sobre como configurar isso.

Para segurança adequada, você precisará de uma chave privada em cada servidor. Eu vejo nos comentários que você não quer manter tudo isso, mas isso é inevitável. Gerar e jogar fora chaves privadas deve ser fácil de fazer, assim como adicioná-las como authorized_keys nos sistemas que elas precisam para conceder acesso.

Mesmo se estamos falando de uma centena de sistemas, a geração de chaves pode ser roteirizada dessa maneira a partir do seu sistema pessoal (isso pressupõe que você já tenha acesso root do seu sistema pessoal):

cd /tmp
mkdir .ssh
chmod 700 .ssh
for server in node{1..100}; do
  echo "Generating key for $server..."
  ssh-keygen -t rsa -b 4096 -C "root@$server" -k .ssh/id_rsa
  cat .ssh/id_rsa.pub >> authorized_keys
  scp -pr .ssh root@$server:
  rm .ssh/id_rsa*
  sleep 1
done
for server in node{1..100}; do
  cat authorized_keys |ssh root@$server "cat >> .ssh/authorized_keys"
done

Eu usei sleep 1 porque todas essas chaves estão sendo geradas no mesmo sistema; Esta é uma verificação de sanidade para garantir que você obtenha mais aleatoriedade. Dois loops foram necessários porque precisamos de cada pubkey antes de podermos compartilhar a lista de chaves autorizadas.

Lá, agora você tem uma centena de servidores, denominados node1 a node100, cada um com uma chave concedendo acesso root para raiz em outro servidor.

(Nota: não defendo permitir que os usuários efetuem login como root. A ferramenta sudo permite um controle e uma responsabilidade muito melhores. Para que o script acima funcione, você deve adicionar seu pubkey ao root authorized_keys em cada nó, senão você precisaria do sudo NOPASSWD access e algumas revisões do meu código (por exemplo, scp -pr .ssh $server:/tmp && ssh $server "sudo chown root:root /tmp/.ssh && sudo mv /tmp/.ssh /root/" ).

    
por 03.03.2015 / 03:47