Longa história: Grande empresa antiga, muitos servidores UNIX / Linux.
Eu herdei a responsabilidade por vários scripts deixados alguns anos atrás. Um deles era um script que seria executado a cada US $ X por meses para atualizar globalmente a senha raiz em todos os nossos servidores.
O script é uma bagunça do Shell Script and Expect e funciona na confiança SSH que é configurada entre todos os nossos servidores e um servidor central de comando e controle.
O problema é que o script é uma bagunça gigante. Os comandos Expect estão tentando contabilizar todas as versões possíveis de "passwd" que existem em qualquer caixa UNIX / Linux existente - e elas variam bastante.
Como estamos expandindo e atualizando grande parte de nossa infraestrutura, o script está ficando realmente incontrolável.
Minha pergunta é: Existe uma maneira melhor de fazer isso? Supondo que haja uma confiança SSH já estabelecida, qual é a melhor maneira de alterar a senha root em mais de 3000 servidores ao mesmo tempo?
sudo
e eliminar completamente as senhas de raiz não é uma opção, é?Respostas:
Use Puppet .
O Puppet é muito flexível, fácil de manter e usa SSL. Pode parecer um pouco exagerado e você terá que fazer um esforço extra para criar o sistema Puppet.
Mas. Provavelmente, essa não é a última atualização em massa que você fará nessas máquinas. O Puppet poupa muito tempo quando real, seja qual for o procedimento de atualização em massa, e os scripts são muito legíveis / reutilizáveis.
Pelo menos isso funcionou para mim há alguns anos e ainda sou capaz de reutilizar algumas dessas receitas Puppet (também conhecidas como scripts). Também o usei em ambientes um pouco menores, apenas para garantir que todas as máquinas estejam realmente com um estado conhecido .
Eu já provei muitas vezes (em muitas empresas) que todos os scripts de implantação personalizados tornam-se problemáticos depois de um tempo ou quando o próximo cara entra em cena. E desde que você use um telefone celular, scripts antigos irão assombrá-lo.
Se você acha que isso realmente soa bem, aqui está um ótimo tutorial do Puppet com ambiente virtual incluído para você começar.
fonte
user{"root":}
para definir a senha. Em vez disso, use umexec{"chpasswd -e ..."}
, que é muito mais seguro.pip install ansible
em uma caixa GNU / Linux, construa uma lista de hosts eansible -m user -a "password=$crpyt"
. Nenhum agente é necessário. Gerencia o GNU / Linux, AIX e Solaris imediatamente.Eu usei o módulo Perl Authen :: PAM no Solaris com grande sucesso. Aqui está um exemplo de script:
fonte
Se você pode escrever Perl, o módulo Net :: OpenSSH :: Parallel permite escrever scripts que executam ações em paralelo em hosts remotos via SSH com bastante facilidade.
Ele contém um exemplo de script para alterar senhas que você pode usar como base. Como parece que você tem um ambiente heterogêneo, gostaria de agrupar os hosts por tipo e usar um submarino de manipulação de diálogo diferente para cada um.
fonte
Não sei o que é "melhor" e se é possível para todas as máquinas não-Linux * nix do seu mix, mas você já viu fantoches ou cfengine para esse tipo de atividade?
Existem também ferramentas comerciais (altamente caras) para gerenciamento de identidades por aí, duas que eu já vi / usei no passado são o Oracle Identity Manager e o equivalente da Novel.
fonte
Depois de continuar pesquisando isso, aprendi algumas coisas ...
Em primeiro lugar, essa é uma tarefa realmente irritante de automatizar, especialmente em muitos ambientes diferentes. A resposta mais correta para essa pergunta provavelmente é da @ tomi: use Puppet.
Eventualmente, espero que o Puppet gerencie a infraestrutura, mas implantar nos servidores UNIX da empresa inteira uma alteração de senha raiz no momento não é uma opção viável.
Depois de ler muitas páginas de manual e muito Google-fu, consegui criar um script que percorre uma lista de servidores de destino, abre uma conexão SSH e executa um dos seguintes procedimentos:
Faz um pouco mais do que executar apenas esses comandos, mas os acima são os que funcionam com a mágica.
Não consegui encontrar uma maneira simples de alterar a senha de forma não iterativa no Solaris - por isso recorremos à modificação
/etc/shadow
em tempo real.fonte
/dev/null
antes de fazê-lo.Recentemente eu fiz isso usando o Script Bash.
fonte
Esta é a minha solução até agora. ainda precisa ver se funciona em vários sistemas
fonte
Você pode usar o pdsh para executar seu comando em vários hosts ao mesmo tempo.
fonte
passwd
é diferente nas diferentes versões mencionadas.pw
nem sempre disponível ....passwd
é sempre interativo.passwd
no RHEL Linux, pelo menos tem um--stdin
parâmetroAlém do fantoche: SaltStack Outra abordagem - automatize a execução usando as bibliotecas SSH sequencialmente ou em paralelo usando o Fabric http://docs.fabfile.org/en/1.6/ , Capistrano ou similar que não exige muito tempo / esforço para implantar.
fonte
Duas opções:
Use fantoche
Use o deck de corrida. Run deck é um servidor que permite executar comandos em centenas de máquinas simultaneamente. Você pode agrupar máquinas em grupos, para executar comandos em apenas um subconjunto de máquinas.
http://rundeck.org
fonte
Eu acho que o formato do
/etc/shadow
arquivo é bastante padrão nas distribuições Linux. Você pode apenas escrever um script awk simples para atualizar a senha.cat /etc/shadow| awk -v pass='NEWPASSHASH' -v now=`date '+%s'` 'BEGIN{ OFS=FS=":"} /^root/ {$2=pass; $3=now} {print}' > /tmp/shadow && mv /tmp/shadow /etc/shadow
Eu me certificaria de testá-lo para que você não se bloqueie;)
fonte