script para automatizar scp na rede

3

Eu tenho uma rede cheia de máquinas Linux. Nesta rede, eu tenho um usuário como user1 com a senha como senha em todas as máquinas.

Eu tenho o seguinte script para colocar arquivos no diretório pessoal de user1 em todas as máquinas da rede.

#!/usr/bin/expect -f

# connect via scp
spawn cat /home/user1/Desktop/IPlistfile.txt | while read line do
spawn scp /home/user1/Desktop/filetobesent.txt user1@${line}:/home/user1/Desktop
#######################
expect {
-re ".*es.*o.*" {
exp_send "yes\r"
exp_continue
}
-re ".*sword.*" {
exp_send "password\r"
}
}
interact
done

O problema é que estou recebendo uma mensagem de erro como " can't read line. No such variable ". No entanto, se eu usar um endereço IP diretamente em vez da variável de linha, poderei transferir o arquivo.

Editar : O IPlistfile.txt contém a lista de endereços IP na minha rede. Cada linha contém um único endereço IP.

    
por Ramesh 04.12.2013 / 00:56

2 respostas

6

Eu posso pensar em algumas maneiras de fazer isso, mas eu recomendo configurar o ssh access sem senha, você me agradecerá mais tarde.

1. Configure o acesso sem senha às suas máquinas.

Este é, de longe, o melhor método, já que você deve se conectar às máquinas novamente e isso tornará sua vida muito mais fácil. Também é muito mais seguro do que as outras opções, mesmo se você optar por usar uma frase secreta vazia, já que você não estará jogando senhas sem criptografia.

Primeiro, crie uma chave pública ssh em sua máquina:

ssh-keygen -t rsa

Ser-lhe-á pedida uma senha que lhe será pedida para introduzir a primeira vez em que executar qualquer comando ssh após cada início de sessão. Isso significa que, para vários comandos ssh ou scp , você só precisará inseri-lo uma vez. No entanto, você pode deixá-lo vazio para ter acesso totalmente sem senha.

Depois de gerar sua chave pública, copie-a (como user1 ) para cada computador em sua rede:

while read ip; do 
 ssh-copy-id -i ~/.ssh/id_rsa.pub user1@$ip 
done < IPlistfile.txt

Você terá que inserir manualmente a senha para cada IP (a menos que você use uma das soluções abaixo para esta etapa também), mas uma vez feito isso, você será capaz de copiar arquivos para qualquer uma dessas máquinas com um simples:

while read ip; do
  scp /home/user1/Desktop/filetobesent.txt user1@$ip:~/Desktop
done < IPlistfile.txt

Se você tiver sshpass instalado, poderá automatizá-lo para não precisar digitar sua senha para cada máquina:

SSHPASS='password'
while read ip; do
  sshpass -e  scp /home/user1/Desktop/filetobesent.txt user1@$ip:~/Desktop
done < IPlistfile.txt

2. Instalar sshpass

Este é um ótimo programa que permite passar uma senha ssh como um parâmetro de linha de comando. Esta, obviamente, não é uma solução muito segura e eu recomendo que você leia a seção "Considerações sobre segurança" de man sshpass .

De qualquer forma, provavelmente está disponível nos repositórios da sua distribuição, nos sistemas baseados no Debian ele pode ser instalado com

sudo apt-get install sshpass

Eu não posso verificar, já que não tenho uma máquina baseada em RedHat, mas pelo que posso dizer, pesquisando aqui , deve ser instalável no Fedora com

sudo yum install sshpass

Depois de ter instalado, você pode simplesmente executar

SSHPASS='password'
while read ip; do
  sshpass -e scp /home/user1/Desktop/filetobesent.txt user1@$ip:~/Desktop
done < IPlistfile.txt

A opção -e informa sshpass para obter a senha da variável SSHPASS . Isso é um pouco mais seguro do que dar a ele um parâmetro com a opção -p .

IMPORTANTE:

Isso falhará silenciosamente se o servidor ao qual você está se conectando for desconhecido, se sua chave pública não estiver armazenada em sua máquina. Se isso não parecer estar funcionando, basta conectar uma vez ( ssh ou scp ) à máquina remota e aceitar sua chave pública.

3. Use pscp em vez

pscp é uma alternativa para scp que aceita a senha como um parâmetro de linha de comando. Em sistemas baseados em Debian, isto pode ser instalado com

sudo apt-get install putty-tools

Como eu disse antes, não posso verificar, mas deve ser instalável no Fedora com

sudo yum install putty

Você pode copiar seus arquivos com

while read ip; do
  pscp -pw password /home/user1/Desktop/filetobesent.txt user1@$ip:~/Desktop
done < IPlistfile.txt
    
por 04.12.2013 / 03:36
0

Verifique este link , você tem um script para facilite em muitos servidores.

    
por 02.09.2015 / 14:53