O produto da minha empresa é essencialmente uma caixa Linux (Ubuntu) na rede de outra pessoa executando nosso software. Até agora, tínhamos menos de 25 caixas na natureza e usamos o TeamViewer para gerenciá-las.
Estamos prestes a enviar 1000 dessas caixas e o TeamViewer não é mais uma opção. Meu trabalho é descobrir uma maneira de acessar essas caixas e atualizar o software nelas . Esta solução deve ser capaz de perfurar firewalls e o que você tem.
Eu considerei:
1. Solução doméstica (por exemplo, um serviço Linux) que estabelece um túnel reverso SSH para um servidor na nuvem e outro serviço na nuvem que mantém o controle desses e permite que você se conecte a eles.
Isso obviamente é trabalhoso e, francamente, parece reinventar a roda, pois muitas outras empresas já devem ter passado por esse problema. Mesmo assim, não tenho certeza se faremos um ótimo trabalho.
2. Ferramentas como fantoche, chef ou OpenVPN
Tentei ler o máximo possível, mas não consigo penetrar o suficiente no discurso de marketing para entender a escolha óbvia a seguir.
Ninguém mais, exceto nós, precisa se conectar a essas caixas. Existe alguém com experiência relevante que possa me dar algumas dicas?
fonte
Respostas:
Receba atualizações, não force
À medida que você escala, torna-se inviável fazer atualizações por push de todos os seus produtos.
Em vez disso, solicite aos seus produtos as atualizações periodicamente e, em seguida, você poderá adicionar capacidade extra ao lado do servidor à medida que crescer.
Quão?
Esse problema já foi resolvido, como você sugeriu. Aqui estão várias abordagens em que consigo pensar.
rsync
/scp
os arquivos necessários.download bruto + verificação de assinatura :
ansible : O Ansible é uma ótima ferramenta para gerenciar configurações do sistema. Está no reino do fantoche / chef, mas não tem agente (usa python) e foi projetado para ser idempotente. Se a implantação do seu software exigir um script bash complicado, eu usaria uma ferramenta como essa para tornar menos complicado a execução de suas atualizações.
Claro, existem outras maneiras de fazer isso. Mas isso me leva a um ponto importante.
Assine / valide suas atualizações!
Não importa o que você faça, é imperativo que você tenha um mecanismo para garantir que sua atualização não seja adulterada. Um usuário mal-intencionado pode se passar por seu servidor de atualização em qualquer uma das configurações acima. Se você não validar sua atualização, sua caixa será muito mais fácil de invadir e invadir.
Uma boa maneira de fazer isso é assinar seus arquivos de atualização. Você precisará manter um certificado (ou pagar alguém para fazê-lo), mas poderá instalar sua impressão digital em cada um dos seus dispositivos antes de enviá-los para que eles possam rejeitar atualizações que foram adulteradas.
Segurança física
Obviamente, se alguém tiver acesso físico à implantação do cliente, poderá facilmente assumir o controle do servidor. Mas pelo menos eles não podem atacar as outras implantações! A segurança física é provavelmente a responsabilidade do seu cliente.
Segurança
Faça o que fizer, a segurança precisa ser incorporada desde o início. Não corte cantos aqui - você vai se arrepender no final, se o fizer.
A proteção total deste sistema de atualização está fora do escopo desta publicação, e eu recomendo fortemente a contratação de um consultor se você ou alguém da sua equipe não tiver conhecimento nessa área. Vale cada centavo.
fonte
fpm
eaptly
existem duas ótimas ferramentas que tornam muito mais fácil criar e hospedar seus próprios pacotes. Acabei de passar por esse processo recentemente e foi muito bom.Você realmente precisa acessá-los?
Ou apenas atualizá-los? Como você pode fazer com que eles se atualizem, semelhante à forma como o apt é atualizado sem supervisão.
Se você precisar fazer login
Por que não um daemon OpenSSH escutando via encaminhamento de porta? Cada cliente pode ter uma chave separada para segurança e só será conectado quando necessário.
Até seus clientes
Você precisa levar em consideração o que o cliente também está disposto a aceitar. Eles podem não se sentir confortáveis com qualquer acesso remoto à sua rede ou apenas com tecnologias / configurações específicas.
fonte
Sugiro uma ferramenta de orquestração como Puppet ou Salt .
O salt é uma fila de mensagens e pode fazer uma conexão de saída persistente do seu dispositivo para um servidor mestre. Você pode usar isso para executar comandos arbitrários nos dispositivos ... como um
apt-get
.A outra opção é Puppet, onde você ainda possui um servidor mestre e os clientes fazem conexões de saída a partir de seus locais.
Uso essas duas ferramentas para uma finalidade semelhante, onde talvez eu não tenha controle administrativo do firewall.
fonte