Linux equivalente ao sistema de comunicação remota "um para muitos" do PowerShell

38

Vindo da administração do Windows, quero aprofundar-me no Linux (Debian). Uma das minhas perguntas mais frequentes que não consegui responder pesquisando na Web (não a encontrei) é: como posso obter o chamado remoting "um para muitos", como no PowerShell para Windows?

Para resumir o básico, eu diria:

Minha opinião no Linux:

  • Posso ssh em um servidor e digite meu comando
  • Eu recebo 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" posso "enviar" isso para vários servidores (talvez de um arquivo de texto) para executar simultaneamente e obter o resultado de volta (como um objeto para trabalhos futuros).

  2. Posso até estabelecer várias sessões, a conexão é mantida em segundo plano e enviar seletivamente comandos para essas sessões, e entrar e sair remotamente conforme necessário.

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


Update 2019:
Depois de tentar muito - sugiro Rex (veja este comentário abaixo ) - configuração fácil (efetivamente, ele só precisa de ssh, nada mais) e uso (se você conhece um pouco de perl , é ainda melhor, mas é opcional)
Com o Rex (ify ) você pode executar o comando adhoc e enviá-lo para um gerenciamento de configuração real (... o que significa: é um CM em primeiro lugar, mas também é bom para tarefas adhoc) O site parece desatualizado, 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

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

eli
fonte
O ssh paralelo pode fazê-lo: serverfault.com/questions/2533/…
rogerdpack 14/16
O MobaXTerm suporta "multi-execução" em várias sessões ssh: mobaxterm.mobatek.net/features.html (role para baixo). Além disso, se o seu ambiente principal de estação de trabalho for o Windows, também será uma ferramenta bastante interessante para conectar-se às caixas Linux e muito mais.
Kev
com tmux: :setw synchronize-panes on( unix.stackexchange.com/a/124800/161003 )
eli

Respostas:

50

Sumário

  • Ansible é uma ferramenta de DevOps que é um poderoso substituto para o 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 iniciantes, eu recomendaria o clusterssh

Para instalar clustersshno Debian:

apt-get install clusterssh

Outro tutorial sobre clusterssh :

O ClusterSSH é um wrapper Tk / Perl em torno das ferramentas padrão do Linux, como XTerm e SSH. Como tal, ele será executado em praticamente qualquer sistema operacional compatível com POSIX, onde as bibliotecas existem - eu o executei no Linux, Solaris e Mac OS X. Requer as bibliotecas Perl Tk (perl-tk no Debian ou Ubuntu) e X11 :: Protocol (libx11-protocol-perl no Debian ou Ubuntu), além do xterm e do OpenSSH.

Ansible

Quanto a uma estrutura remota para administração de múltiplos sistemas, o Ansible é uma alternativa muito interessante ao Puppet. É mais enxuto e não precisa de agentes remotos dedicados, pois trabalha com SSH (também foi comprado pela RedHat)

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

No entanto, para começar a usar o Ansible, você precisa de uma instalação simples e 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 a executa em segundo plano, pode ser redirecionada para um arquivo e consultada posteriormente.

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

Como exemplo, um manual muito simples para atualizar servidores Linux que 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 possui muitos módulos definidos que permitem escrever facilmente políticas abrangentes.

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

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

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

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

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

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

Também é capaz de administrar equipamentos de rede (roteadores, comutadores e firewall), o que a torna uma solução muito interessante como uma solução chave 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, recomendo o Rundeck .

É uma interface gráfica multiusuário / login muito poderosa, na qual você pode automatizar muitas das tarefas comuns do dia-a-dia e até fornecer visualizações reduzidas a sysops ou pessoas do suporte técnico.

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

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

imagem desmembrada

Como instalar o RunDeck

Observe que há pessoas executando o Ansible + RunDeck como uma interface da web; nem todos os casos são apropriados para isso.

Também não é necessário dizer que o uso do Ansible e / ou RunDeck pode ser interpretado como um formulário ou parte da documentação da infra-estrutura e, com o tempo, permite replicar e melhorar as ações / receitas / Playbooks.

Por fim, falando sobre um servidor de comando central, eu criaria apenas um para a tarefa. Na verdade, o termo técnico é uma caixa de salto. As 'caixas de salto' aumentam a segurança, se você as configurar corretamente .

Rui F Ribeiro
fonte
1
O Ansible é uma ótima solução versus algum script ou utilitário que apenas transmite um comando para vários servidores SSH. O Ansible faz isso (e é mais adequado para esse objetivo do que o Puppet ou o Chef), mas também oferece a opção de atingir seu objetivo de uma maneira melhor, por exemplo, usando um módulo embutido para instalar algo idempotentemente, em vez de apenas enviar o comando de instalação e esperando o melhor.
JBentley
24

Se você quiser fazê-lo interativamente, pode usar o terminatorque permite transmitir um comando para vários terminais.

insira a descrição da imagem aqui

Consulte: Como executo o mesmo comando linux em mais de uma guia / shell simultaneamente?

jlliagre
fonte
Muito chato quando você acidentalmente pressiona o atalho para esse recurso ... :) #
pipe #
Da mesma maneira com tmuxe Crtl + b #:set sync on
12

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
morxa
fonte
11

Talvez você possa atingir seu objetivo com uma simples função zsh (bash). Digamos que você tenha servidores l61 l62 l63 e frequentemente precise 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
Sergei Kurenkov
fonte
5
Eu recomendaria imprimir o nome dos servidores antes da saída deles. A execução do script em paralelo também traz outras peculiaridades, como atrapalhar a saída do script - medidas extras devem ser tomadas para preservar a atividade da saída. A execução de cada tarefa em primeiro plano também oferece a possibilidade de interação mínima de entrada.
Rui F Ribeiro
3

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

Todo comando que você digitar nessa guia será copiado para todos os servidores.
Você pode alternar de uma aba para outra para ver os diferentes resultados.

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

user161210
fonte
1

GNU paralelo

Ele permite linhas simples simples com configurações salvas, para que você possa criar um perfil, "prod ', que conterá uma lista de servidores e opções comuns. Em seguida, basta adicionar o comando desejado e estar pronto. Ele também pode copiar arquivos para o servidor e exclua-os automaticamente no final, e é muito 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, para que você possa vê-los no começo.

alkuzad
fonte
2
Olá, Bem-vindo ao Linux e Linux. Alguém já deu um script usando o gnu-parallel tem um exemplo. Aconselho que você dê uma olhada, respostas mais elaboradas são apreciadas e fornecerão mais pontos.
Rui F Ribeiro
1
@RuiFRibeiro desculpe por não ter notado, SO bugs no aplicativo Android com caixas de código e não consegui ver a maior parte do conteúdo (gera espaço em branco em branco). Você mencionou gnu-paralela é desastrado saída - pode escrevê-lo em ordem, mas você tem que dizer a ele para fazê-lo :)
alkuzad
Sim, não estou familiarizado com isso, mas já suspeitei, portanto, mencionar a resposta precisa ser aprimorada. Obrigado. Nada impede que você escreva uma resposta melhor, mas para comentar, recomendo comentar nessa resposta.
Rui F Ribeiro
1

Também quero mencionar "Rex" aqui: https://www.rexify.org/

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

você pode executar comandos adhoc em vários servidores de uma só vez (servidor1, servidor2, servidor ... - após configurar a autenticação ou, alternativamente, usar os parâmetros -p / -u e -s / -S para executar o comando sudo):

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

ou crie um arquivo em que você especifique "tarefas" diferentes e as chame a partir daí

$ rex -f myConfigFile.rex uptime

Ele pode ser instalado via repositórios ou mesmo com o perls cpan (ou cpanm Rex) e sua configuração inicial é fácil, consulte:
- https://www.rexify.org/ ou
- https://www.rexify.org/docs/guides/ start_using__r__ex.html e
- http://www.admin-magazine.com/Archive/2014/21/First-steps-in-IT-automation-by-Rex

eli
fonte