5 pontos por xguru 2025-04-22 | 2 comentários | Compartilhar no WhatsApp
  • Ferramenta de CLI que permite executar comandos simultaneamente em vários servidores por meio de sessões SSH paralelas
  • Suporta desde uso simples até controle avançado de entrada/saída, sendo útil para administração de clusters de servidores

Recursos básicos

  • Executa comandos em vários hosts e exibe a saída com o nome do host como prefixo
    • Exemplo: pussh -h host1,host2 uname -a
  • A lista de hosts pode ser fornecida por arquivo ou pela entrada padrão
    • Exemplo: pussh -f servers uname -a ou fetch-servers | pussh -f - uname -a
  • A saída pode ser encadeada em pipelines para ordenação ou filtragem
    • Exemplo: ordenar por uso de disco → pussh -f servers df -h / | grep /dev | sort -rn -k5
  • É possível salvar a saída de cada host em arquivos separados (%h representa o nome do host)
    • Exemplo: pussh -f servers -o %h-hw.txt lshw
  • Também é possível enviar a saída do SSH para outro comando por pipe
    • Exemplo: pussh -f servers -o '|grep feature' command > output

Recursos de controle de entrada

  • Ao executar comandos, a entrada pode ser fornecida por arquivo ou pela saída de outro comando
    • Exemplo: pussh -f servers -i file command
    • Exemplo: arquivo de entrada por host → pussh -f servers -i %h.data command
    • Exemplo: entrada dinâmica → pussh -f servers -i 'get-data %h|' command
  • -i e -o podem ser combinados livremente

Recursos de implantação e execução

  • Permite transferir e executar remotamente comandos ou scripts
    • Exemplo: pussh -f servers -u my-deploy.sh args ...
    • No entanto, o executável deve ser self-contained ou compatível com o ambiente dos servidores de destino

Dicas de otimização de desempenho

  • A velocidade de estabelecimento das conexões SSH tem grande impacto no tempo total de execução
  • Se o limite de processamento do agente SSH for excedido, podem ocorrer falhas de autenticação ou erros de conexão
  • Recomendação: definir uma taxa de execução (rate) ao usar a ferramenta (ex.: alias pussh='pussh -r 50')
  • Como a latência de rede influencia muito, costuma ser mais rápido acessar por ssh uma máquina na LAN remota e executar o pussh a partir dela
    • Benchmark de exemplo (com base em uma LAN Gigabit):
      $ time pussh -f servers -r 100 date  
      Total: 201 host(s), 4 second(s)  
      
      real    0m4.069s  
      user    0m7.132s  
      sys     0m3.140s  
      

Desenvolvimento e histórico

  • Ferramenta usada internamente pela Bearstech desde 2008
  • No início era apenas algumas linhas de shell script e hoje opera de forma estável até mesmo em clusters com mais de 500 servidores
  • Integrada a sistemas de gerenciamento de nuvem, ela gera listas de hosts executáveis a partir de descrições simples de hosts

Limitações

  • O stdout e o stderr do servidor remoto não são separados e saem combinados em um único fluxo
  • Não é possível obter o estado de saída (exit status) do comando executado no servidor remoto

2 comentários

 
ahwjdekf 2025-04-24

O nome é suspeito!

 
nemorize 2025-04-25

Não poderia concordar mais 🤣