Pesquisa de site

Execute um único comando em vários sistemas remotos ao mesmo tempo usando PSSH


Há algum tempo, publicamos um guia para "copiar um arquivo para vários diretórios na linha de comando no Linux". Nesse artigo, ensinamos vários métodos para copiar um único arquivo para vários diretórios ao mesmo tempo. Hoje veremos como executar um único comando em vários sistemas remotos ao mesmo tempo em sistemas operacionais do tipo Unix. Como você já sabe, podemos acessar e nos comunicar com sistemas remotos usando ssh. O openSSH nos permite realizar todos os tipos de tarefas administrativas em um sistema remoto. Uma limitação do openSSH é que não podemos executar um único comando em vários sistemas remotos ao mesmo tempo. Sem problemas. É aqui que o PSSH vem preencher esta lacuna.

O que é PSSH?

PSSH, ou SSHparalelo, é um conjunto de linha de comando que ajuda você a fazer ssh em paralelo em vários hosts. O pacote PSSH consiste nos seguintes comandos:

  • pssh - SSH para vários sistemas remotos em paralelo,
  • pscp - Copia arquivos em paralelo para vários hosts,
  • prsync: copia arquivos em paralelo para vários hosts,
  • pnuke : elimina processos em paralelo em vários hosts,
  • pslurp : Copia arquivos em paralelo de vários hosts.

Neste tutorial, veremos como executar um único comando em vários hosts ao mesmo tempo usando PSSH.

Instale PSSH no Linux

Podemos instalar facilmente o PSSH usando PIP, um gerenciador de pacotes python.

Para instalar o PIP no Arch Linux e seus derivados, execute:

sudo pacman -S python-pip

No RHEL, Fedora, CentOS:

sudo yum install epel-release
sudo yum install python-pip

No RHEL mais recente e seus clones (AlmaLinux e Rocky Linux), execute:

sudo dnf install epel-release
sudo dnf install python-pip

No Debian, Ubuntu, Linux Mint, Pop OS:

sudo apt-get install python-pip

Para obter mais detalhes sobre o gerenciamento de pacotes python usando PIP, consulte o link a seguir.

  • Como gerenciar pacotes Python usando Pip

Depois de instalar o PIP, execute o seguinte comando para instalar o PSSH.

sudo pip install pssh

PSSH foi instalado! Vamos em frente e ver como usá-lo.

Execute um único comando em vários sistemas remotos ao mesmo tempo usando PSSH

Importante: para usar o PSSH (apenas para o propósito deste tutorial), todos os seus sistemas remotos devem ter um nome de usuário comum com a mesma senha. Caso contrário, este método não ajudará. Digamos, por exemplo, que eu já criei um usuário chamado sk com senha ostechnix em todos os meus hosts remotos. Você também deve ter o mesmo usuário com a mesma senha em todos os seus sistemas remotos.

Agora, vamos ver como executar um único comando em vários hosts remotos usando PSSH. Vá para o sistema local onde deseja executar o comando e crie um arquivo de texto chamado remotehosts.txt. Você pode nomeá-lo como desejar.

vi remotehosts.txt

Adicione endereços IP de seus hosts remotos com números de porta, um por um, conforme mostrado exatamente abaixo.

192.168.1.103:22
192.168.1.104:22

Onde 192.168.1.103 e 192.168.1.104 são os endereços IP dos meus sistemas remotos. 22 é o número da porta ssh. Você precisa mencionar o número da porta correto se já o tiver alterado. Além disso, certifique-se de poder acessar todos os hosts remotos do seu sistema local via ssh.

Agora, vamos verificar o tempo de atividade de ambos os hosts remotos do nosso sistema local. Para fazer isso, execute:

pssh -h remotehosts.txt -l sk -A -i "uptime"

Aqui,

  • remotehosts.txt – Contém os endereços IP de ambos os sistemas remotos.
  • sk - o nome de usuário de ambos os sistemas remotos

Digite a senha do usuário "sk".

Exemplo de resultado:

Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password: 
[1] 20:51:15 [SUCCESS] 192.168.1.103:22
 20:50:50 up 8 min, 1 user, load average: 0.05, 0.11, 0.10
[2] 20:51:15 [SUCCESS] 192.168.1.104:22
 20:50:52 up 12 min, 1 user, load average: 0.00, 0.07, 0.12

Como você pode ver acima, executamos o comando “uptime” em dois hosts remotos e obtivemos o resultado de uma só vez.

E quanto à versão do kernel? Para verificar a versão instalada de ambos os hosts remotos, execute:

pssh -h remotehosts.txt -l sk -A -i "uname -r"

Exemplo de resultado:

Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password: 
[1] 20:53:09 [SUCCESS] 192.168.1.103:22
3.10.0-327.22.2.el7.x86_64
[2] 20:53:09 [SUCCESS] 192.168.1.104:22
4.4.0-21-generic

Muito legal, não é? Podemos criar um diretório em ambos os hosts remotos ao mesmo tempo? Sim claro! Para fazer isso, execute o seguinte comando:

pssh -h remotehosts.txt -l sk -A -i "mkdir dir1"

Da mesma forma, você pode fazer o que quiser em vários hosts remotos de seu sistema local usando PSSH.

Importante: tenha muito cuidado ao usar o PSSH. Um comando incorreto será executado simultaneamente em vários hosts e danificará todos os hosts. Portanto, tenha muito cuidado ao usar esse método na produção. Eu sugiro que você teste isso em máquinas virtuais. Quando estiver familiarizado com o PSSH, você poderá usá-lo na produção, se desejar.

Leitura sugerida:

  • DSH – Execute um comando Linux em vários hosts ao mesmo tempo
  • Executar comandos em sistemas Linux remotos via SSH

Espero que isto ajude.

Artigos relacionados