Use scp para copiar um arquivo para diferentes servidores

4

Eu tenho que copiar um arquivo para servidores diferentes quase todos os dias. O que eu costumo fazer é:

scp filename user@destinationhost:/destination/folder

Eu executo esse mesmo comando alterando o host de destino várias vezes até terminar todos os servidores. Qual é a melhor (e mais rápida) maneira de transferir o mesmo arquivo para esses diferentes servidores?

Outra desvantagem é que preciso inserir a senha repetidamente, mas usar rsa não é uma opção, já que várias pessoas podem se conectar ao servidor de origem.

Editar - eu encontrei o loop em commandlinefu que pode fazer o truque:

 for h in host1 host2 host3 host4 ; { scp file user@$h:/destination_path/ ; }
    
por Ruben Ploneda 15.05.2012 / 22:39

4 respostas

4

Existem várias ferramentas que podem enviar arquivos scp para múltiplos hosts (com conexões simultâneas), como pssh e kanif . Em termos de senhas, sugiro usar o encaminhamento de agentes . Isso permite manter a chave em sua máquina local, mas usá-la ao iniciar conexões SSH de outro host. Caso contrário, a opção --askpass para o comando parallel-scp de pssh faz com que seja solicitada uma senha para cada host.

Se você não puder instalar uma ferramenta para fazer isso, configure o encaminhamento do agente (adicionando a opção -A a ssh ao conectar-se à máquina na qual você está fazendo isso) e execute scp em um loop assim:

for HOST in server1 server2 server3; do
    scp somefile $HOST:~/somedir/
done
    
por 15.05.2012 / 22:49
2

Tente fazer isso com um script de expectativa, por exemplo,

#!/bin/bash

HOSTS="h1.lan h2.lan h3.lan"

read -p "Password: " PASSWORD


for HOST in $HOSTS
do
    expect -c "
    spawn /usr/bin/scp file user@$HOST:/destination_path/
    expect {
    "*password:*" { send $PASSWORD\r;interact }
    }
    exit
    "
done

O texto acima deve ser bastante simples para se adaptar às suas necessidades.

    
por 15.05.2012 / 23:54
1

Acho que sshpass deve ser mencionado aqui. Esta é a minha vez de enviar um arquivo para vários destinos, com uma senha obrigatória:

filePath="/home/download/textToSend.txt"
ip_range=("10.10.10.1" "10.10.10.2" "10.10.10.3" "10.10.10.4")
# Start file transfer
echo "Starting file transfer to ${#ip_range[@]} units."
for ((i=0; i<${#ip_range[@]}; ++i )) ;
do
   echo "Transfering ${filePath} to ${ip_range[$i]}..."
   sshpass -p password scp -o 'StrictHostKeyChecking=no' "${filePath}" root@${ip_range[$i]}:/home/downloads&
done
wait
echo "File transfers ended"
    
por 03.07.2018 / 11:38
0

Eu usei 'sshpt' para uma situação semelhante. O SSH Power Tool (sshpt) permite que você execute comandos e carregue arquivos para vários servidores simultaneamente via SSH sem usar chaves pré-compartilhadas. Arquivos e comandos enviados podem ser executados diretamente ou via sudo.

    
por 15.05.2012 / 23:02