Executa o comando cmd exec em vários servidores locais a partir da entrada (sshpass?)

0

Atualmente, estou procurando uma solução para executar comandos remotos em vários servidores locais a partir de um arquivo de entrada contendo o 'usuário: senha' no seguinte formato:

jboss5:manager:192.168.1.101
database1:db01:192.168.20.6
server8:localnet:192.168.31.83
x:z:192.168.1.151
test:mynet:192.168.35.44
.... and others

Alguns comandos que desejo executar remotamente:

cd $HOME; ./start_script.sh; wget 192.168.1.110/monitor.sh; chmod +x monitor.sh; ./monitor.sh

Eu sei que existe um utilitário chamado "sshpass", mas não tenho certeza de como eu poderia aplicar esse utilitário para as minhas necessidades.

Estou aberto a qualquer ideia para satisfazer minha necessidade, qualquer ajuda seria muito apreciada!

Obrigado

    
por John Doe 31.08.2018 / 23:09

1 resposta

0

Em vez de usar a autenticação de senha, recomendo que você use a autenticação de chave pública, é muito mais strong do que a senha simples e não precisa de sshpass . Apenas crie chaves privadas sem senhas e use a opção ssh do -i , mas se você ainda quiser usar senhas, abaixo está a solução:

#!/bin/sh

hosts='
jboss5:manager:192.168.1.101
database1:db01:192.168.20.6
server8:localnet:192.168.31.83
x:z:192.168.1.151
test:mynet:192.168.35.44
'

for acct in ${hosts}; do
  user=$(echo "${acct}" | awk -F: '{print $1}')
  pass=$(echo "${acct}" | awk -F: '{print $2}')
  host=$(echo "${acct}" | awk -F: '{print $3}')

  sshpass -p "${pass}" ssh "${user}@${host}" \
    'cd $HOME; ./start_script.sh; wget 192.168.1.110/monitor.sh; chmod +x monitor.sh; ./monitor.sh'
done
    
por 01.09.2018 / 00:26