O MaaS, juju, ou o charme responsável pelo ssh-keygen nos nós?

2

Meu sistema de MaaS trabalha, alista, recruta, comissões, emite mandados, faz cortes marciais, implanta e destrói. O juju parece funcionar bem: bootstraps localmente, instala juju-gui, meus charms são implementados, unidades são atribuídas a serviços como seria de se esperar, minhas relações são anotadas e ganchos são executados e tudo é exibido bem no juju-gui.

Os charms que estou usando são um controlador combinado (1) e um conjunto escravo (muitos). O controlador deve rsync entre si e cada um dos escravos. O que acontece é que os escravos rejeitam a tentativa, reclamando que não conseguem abrir o arquivo sseh_host_ed25519_key. (tail -f /var/log/auth.log) (Eu estou executando o script, não charme ainda, eu rsh'd para o controlador como o Ubuntu, e estou correndo de lá)

Eu li que a resposta é bastante simples, faça ssh-keygen -a em cada máquina. Primeiro, eu corro isso no controle e depois no escravo. Eu tento o rsync, auth.log diz conexão fechada por [preauth]. Eu tento ssh_copy-id, mas ele recebe "Permission denied. (Publickey)", a mesma entrada no auth.log.

Então, minhas perguntas: Onde coloco o ssh-keygen para que ele funcione? O que estou perdendo na distribuição das chaves que estão me amando?

    
por rmustakos 31.03.2015 / 00:58

2 respostas

2

O MAAS fará com que você tenha acesso a cada nó adicionando a chave que Juju lhe diz (e essa chave é apenas sua chave pública). As unidades não têm acesso SSH a si mesmas por design (pense nas implicações de segurança!).

Se você quiser fazer com que todas as unidades ou serviços possam acessar uns aos outros, você precisa que cada máquina gere uma chave SSH para o usuário que deseja interagir, e então envie sua chave pública ssh através da relação. Então, se isso é para um mestre - > configuração de escravos aqui é como você faria algo assim:

master-charm / metadata.yaml

name: master-charm
provides:
  master:
    interface: my-charm-interface

slave-charm / metdata

name: slave-charm
requires:
  master:
    interface: my-charm-interface

Então, em cada encanto, você precisará fazer algo como o seguinte:

(master | escravo) -charm / hooks / master-relation-joined

#!/bin/bash

if [ ! -f ~user-you-want-access/.ssh/id_rsa ]; then
  ssh-keygen -t rsa -N "" -f ~user-you-want-access/.ssh/id_rsa
  chown -R user-you-want-access.user-you-want-access ~user-you-want-access/.ssh
fi

relation-set public-key="$(cat ~user-you-want-access/.ssh/id_rsa.pub)"

(master | escravo) -charm / hooks / master-relation-changed

#!/bin/bash

key="$(relation-get public-key)"

if [ ! -z "$key" ] && ! grep -q "$key" ~user-you-want-access/.ssh/authorized_keys; then
  echo "$key" >> ~user-you-want-access/.ssh/authorized_keys
  chown -R user-you-want-access.user-you-want-access ~user-you-want-access/.ssh
fi

Estes são apenas para esboçar como você modelaria algo assim. Você poderia fazer o mesmo para o acesso entre nós usando as relações de pares.

    
por Marco Ceppi 31.03.2015 / 04:36
1

Em resposta à sua pergunta geral, o pacote cloud-init é responsável por gerar chaves de host durante a primeira inicializar em imagens em nuvem.

No seu caso mais específico, eu não acho que atualmente gera chaves ed25519, mas isso não é conhecido por causar problemas para os usuários. Se isso causar um problema para você, você deve observar seu caso de uso com mais detalhes no bug 1382118 . Por que você especificamente precisa do ed25519?

    
por Robie Basak 31.03.2015 / 04:01