Como copio um arquivo de vários servidores para o meu sistema local?

11

Temos várias implantações de um aplicativo em servidores, como app00, app01 e assim por diante. Eu preciso copiar um único arquivo de log de todos esses servidores para o meu Mac local para que eu possa executar alguns grepping e corte.

Eu usei o csshX para visualizar este arquivo, mas não consigo encontrar um equivalente para scp. Eu basicamente quero duas coisas:

  1. Capacidade de se conectar a n números de tais servidores e copiar o arquivo
  2. Evite nomear conflitos localmente, talvez prefixando o arquivo de log com o nome do host do servidor

Como faço isso?

    
por Gaurav 20.05.2014 / 13:27

5 respostas

18

Isso é trivial para fazer com um pequeno script. Por exemplo:

for server in app0 app1 app4 app5 appN; do
    scp user@$server:/path/to/log/file /local/path/to/"$server"_file
done

O acima irá copiar o arquivo de cada um dos servidores sequencialmente e nomeá-lo SERVERNAME_file . Assim, o arquivo de app0 será app0_file etc. Você pode, obviamente, alterar os nomes para o que quiser.

    
por 20.05.2014 / 13:36
12

Use o paralelo GNU :

parallel -j0 scp {}:/remote_path file_from_{} ::: host1 host2 host3 # and so on

Ao contrário das soluções que usam for , isso executará todos os downloads em paralelo

    
por 20.05.2014 / 18:47
5
remote_path="/path/to/file"
local_target_dir="/path/to/dir"
hosts=(app00 app01)
for host in "${hosts[@]}"; do
    scp "$host":"$remote_path" "$local_target_dir"/filename."$host"
done
    
por 20.05.2014 / 13:35
0

Se você é capaz de usar o python, há um módulo interessante que simplifica as tarefas de administração de máquinas chamadas de fabric: link

Eu queria usá-lo, mas não fiquei por perto também

    
por 27.05.2014 / 15:38
0

Isso funcionou para mim

#!/bin/bash
#Expect script
/usr/bin/expect -<<EOD 

set SERVERS {1 2 3 .. N}

foreach SERVER \$SERVERS {
    spawn scp user@\$SERVER:remote local/"\$SERVER"RESWeb.log
    expect {
      -re ".*es.*o.*" {
        exp_send "yes\r"
        exp_continue
      }
      -re ".*sword.*" {
        exp_send "pswrd\r"
      }
    }
    expect eof 
}
EOD

echo "completed"
    
por 13.05.2016 / 15:05

Tags