Linux equivalente ao remoting “one-to-many” do PowerShell

40

Vindo da administração do Windows, eu quero ir mais fundo no Linux (Debian). Uma das minhas perguntas mais candentes que eu não pude responder pesquisando na web (não encontrei) foi: como posso alcançar o chamado "um-para-muitos" como no PowerShell para Windows?

Para dividir com o básico, eu diria:

Minha opinião sobre o Linux:

  • Eu posso ssh em um servidor e digite meu comando
  • Eu obtenho o resultado. Para um ambiente de 10 servidores eu teria que escrever um script (perl / python?) Enviando o comando para cada um deles?

Minha experiência no Windows:

  1. Eu digito meu comando e com "invoke-command" eu posso "enviar" isso para um grupo de servidores (talvez de um textfile) para executar simultaneamente e obter o resultado de volta (como um objeto para trabalhos futuros) .

  2. Eu posso até estabelecer várias sessões, a conexão é mantida em segundo plano e, seletivamente, enviar comandos para essas sessões e fazer entradas e saídas remotas como eu preciso.

(Eu ouvi falar de chef, fantoche, etc. Isso é algo assim?)

Update 2019:
Depois de tentar muito - sugiro Rex (veja este comentário abaixo ) - instalação fácil (efetivamente só precisa de ssh, nada mais) e usar (se você sabe que apenas um pouco perl é ainda melhor, mas é opcional)
Com Rex (ify) você pode usar o comando adhoc e avançá-lo para um gerenciamento de configuração real (... o que significa: é um CM em primeiro lugar, mas também é bom para tarefas ad hoc) O site parece ultrapassado, mas atualmente (a partir de 01/2019) está em desenvolvimento ativo e o canal IRC também está ativo.

Com o novo openssh do Windows, existem ainda mais possibilidades

você pode tentar: rex -u user -p password -H 192.168.1.3 -e 'say run "hostname"'

    
por eli 14.03.2016 / 09:23

7 respostas

53

Resumo

  • Ansible é uma ferramenta de DevOps que é uma poderosa substituta do PowerShell
  • RunDeck como uma interface gráfica é útil
  • Algumas pessoas executam o RunDeck + Ansible juntos

clusterssh

Para enviar comandos remotos para vários servidores, para um iniciante, eu recomendaria clusterssh

Para instalar o clusterssh no Debian:

apt-get install clusterssh

Outro tutorial de clusterssh :

ClusterSSH is a Tk/Perl wrapper around standard Linux tools like XTerm and SSH. As such, it'll run on just about any POSIX-compliant OS where the libraries exist — I've run it on Linux, Solaris, and Mac OS X. It requires the Perl libraries Tk (perl-tk on Debian or Ubuntu) and X11::Protocol (libx11-protocol-perl on Debian or Ubuntu), in addition to xterm and OpenSSH.

Ansible

Quanto a um framework remoto para administração de múltiplos sistemas, o Ansible é uma alternativa muito interessante para o Puppet. Ele é mais enxuto e não precisa de agentes remotos dedicados, pois funciona com o SSH (ele também foi comprado pela RedHat)

Os Playbooks são mais elaborados que as opções de linha de comando.

No entanto, para começar a usar o Ansible, você precisa de uma instalação simples e de configurar o arquivo de texto da lista de clientes.

Depois, para executar um comando em todos os servidores, é tão simples quanto:

ansible all -m command -a "uptime"

A saída também é muito bem formatada e separada por regra / servidor, e enquanto executá-lo em segundo plano pode ser redirecionada para um arquivo e consultada posteriormente.

Você pode começar com regras simples, e o uso de Ansible ficará mais interessante conforme você cresce no Linux, e sua infra-estrutura se torna maior. Como tal, fará muito mais do que o PowerShell.

Como exemplo, um Playbook muito simples para atualizar os servidores Linux que eu escrevi:

---
- hosts: all
  become: yes
  gather_facts: False
  tasks:
   - name: updates a server
     apt: update_cache=yes
   - name: upgrade a server
     apt: upgrade=full

Ele também tem muitos módulos definidos que permitem escrever facilmente políticas abrangentes.

Índice do módulo - Documentação do Ansible

Ele também tem um interessante hub oficial / rede social de repositórios para procurar políticas ansiosas já feitas pela comunidade. Galáxia Ansible

O Ansible também é amplamente usado, e você encontrará muitos projetos no github, como este de mim para Configuração do FreeRadius .

Embora o Ansible seja uma estrutura gratuita de código aberto, ele também tem uma interface de painel web paga, Ansible Tower , embora o licenciamento seja bastante caro.

Hoje, depois que a RedHat comprou, a torre também tem a versão de código aberto conhecida como AWX .

Como bônus, o Ansible também é capaz de administrar servidores Windows, embora eu nunca tenha usado isso para isso.

Também é capaz de administrar equipamentos de rede (roteadores, switches e firewall), o que torna uma solução muito interessante como uma solução de chave na mão de automação.

Como instalar o Ansible

Rundeck

Mais uma vez, para uma estrutura remota mais fácil de usar, mas não tão potente quanto a Ansible, eu recomendo Rundeck .

É uma interface gráfica multi-usuário / login muito poderosa, na qual você pode automatizar grande parte das suas tarefas comuns do dia-a-dia, e até mesmo dar visualizações mais enxutas aos usuários do sistema operacional ou do helpdesk.

Ao executar os comandos, ele também fornece janelas com a saída dividida por servidor / tarefa.

Ele pode executar várias tarefas em segundo plano sem problemas e permite que você veja o relatório e a saída posteriormente.

Como instalar o RunDeck

Por favor, note que há pessoas rodando Ansible + RunDeck como uma interface web; nem todos os casos são apropriados para isso.

Também é preciso dizer que usar Ansible e / ou RunDeck pode ser interpretado como uma forma ou parte da documentação de infra-estrutura, e com o tempo permite replicar e melhorar as ações / receitas / Playbooks.

Por último, falando sobre um servidor de comando central, eu criaria um apenas para a tarefa. Na verdade, o termo técnico é uma caixa de salto. 'Jump boxes 'melhore a segurança, se você configurá-los corretamente .

    
por 14.03.2016 / 09:53
25

Se você quiser fazer isso interativamente, você pode usar terminator , que permite transmitir um comando para vários terminais.

Veja: Como executo o mesmo comando linux em mais de uma aba / shell simultaneamente?

    
por 14.03.2016 / 10:15
13

Você também pode usar pssh (ou parallel-ssh ), que é um cliente SSH que se conecta a uma lista de hosts e executa o comando em todos os hosts em paralelo:

$ parallel-ssh -i -H "host1 host2" uname -a
[1] 11:37:12 [SUCCESS] host2
Linux host2 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[2] 11:37:12 [SUCCESS] host1
Linux host1 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
    
por 14.03.2016 / 19:41
11

Talvez você consiga atingir seu objetivo com uma função simples de zsh (bash). Digamos que você tenha servidores l61 l62 l63 e geralmente precisa executar um comando neles:

function run_on_cluster()
{
    (for srv in l61 l62 l63;
    do
        echo "ssh $srv $1";
    done) | parallel --gnu
}

Então, na linha de comando:

$ run_on_cluster "uname -r"
2.6.32-279.el6.x86_64
2.6.32-279.el6.x86_64
2.6.32-504.23.4.el6.x86_64
    
por 14.03.2016 / 10:09
3

Se você está usando o KDE, aqui está outro método.
- Abra uma janela do Konsole.
Para cada servidor com o qual você deseja se comunicar:
  - abrir uma guia
  - estabelecer conexão ssh com o servidor
No menu "Editar", selecione "copiar entrada" para "todas as guias"

Todos os comandos inseridos nessa guia serão copiados para todos os servidores.
Você pode alternar de guia para guia para ver os resultados diferentes.

Nota: meus rótulos de menu (entre aspas) podem estar errados já que eu não uso uma versão em inglês do KDE

    
por 15.03.2016 / 15:07
1

Paralelo GNU

Ele permite ajustes simples com configurações salvas, para que você possa criar um perfil, "prod ', que conterá uma lista de servidores e switches comuns. Em seguida, adicione o comando desejado e você está pronto. Ele também pode copiar arquivos para o servidor e excluí-los automaticamente no final, e é bastante conveniente para scripts ainda maiores.Também é muito rápido.

O único problema é que ele tem muitas opções;) Mas a documentação também inclui muitos exemplos, então você pode apenas olhar para eles no começo.

    
por 15.03.2016 / 09:23
1

Também quero mencionar "Rex" aqui: link

É uma ferramenta incrível que usa perl + ssh (usuário / senha ou autenticação de chave) e porque o perl está instalado em todos os sistemas linux (!!), eu acho parece mais natural de usar (tem algumas semelhanças com Ansible & Co.)

você pode executar comandos adhoc em vários servidores ao mesmo tempo (server1, server2, server ... - depois de configurar a autenticação ou, alternativamente, usar os parâmetros -p / -u e -s / -S para execução sudo do comando ):

$ rex -H "server[1..3]" -e 'say run "uptime"'

ou crie um arquivo onde você especifica diferentes "tarefas" e chame-as de lá

$ rex -f myConfigFile.rex uptime

Ele pode ser instalado via repositórios ou até mesmo com perls cpan (ou cpanm Rex ) e sua configuração inicial é fácil, veja:
- link ou
- link e
- link

    
por 04.10.2017 / 11:58