Posso executar comandos em paralelo em uma lista de máquinas usando pssh
o comando. Por exemplo, para criar uma pasta foo
em várias máquinas, listadas em hosts.txt
Posso executar:
pssh -h hosts.txt -l MyUserName "mkdir foo"
Mas como o comando requer mais argumentos (ou seja, usando chave pública para autenticação, etc.), tentei criar o seguinte script bash bar.sh
, de forma que o comando que desejo executar seja simplesmente fornecido como argumento para o script:
#!/bin/bash
pssh -h hosts.txt -l MyUserName "$@"
Mas correr bar.sh mkdir foo
congela o terminal, mesmo eu não consigo matá-lo usando Ctrl+C.
Alguma ideia?
Responder1
Eu não estou muito familiarizado com pssh
. Você recebe o mesmo erro ao usar o GNU Parallel:
#!/bin/bash
parallel -j10 --slf hosts.txt --nonall "$@"
Coloque o nome de usuário em hosts.txt:
myuser@host1
myuser@host2
Responder2
É necessário usar -i (saída agregada inline e erro para cada servidor), abaixo funcionará:
pssh -h pssh.txt -l root -i uptime