97 votes

Automatiser le transfert de fichiers scp en utilisant un shell script.

J'ai un nombre n de fichiers dans un répertoire sur mon système unix. Y a-t-il un moyen d'écrire un shellscript qui transférera tous ces fichiers via scp vers un système distant spécifié. Je spécifierai le mot de passe dans le script, afin de ne pas avoir à le saisir pour chaque fichier.

105voto

Pradeep Pati Points 3253

Au lieu de coder en dur le mot de passe dans un shell script, utilisez les clés SSH, c'est plus simple et sécurisé.

$ scp -i ~/.ssh/id_rsa *.derp devops@myserver.org:/path/to/target/directory/

en supposant que votre clé privée est à ~/.ssh/id_rsa et les fichiers que vous voulez envoyer peuvent être filtrés avec *.derp

Pour générer une paire de clés publique / privée :

$ ssh-keygen -t rsa

Ce qui précède va générer 2 fichiers, ~/.ssh/id_rsa (clé privée) et ~/.ssh/id_rsa.pub (clé publique)

Pour configurer les clés SSH à utiliser (tâche unique) : Copiez le contenu du fichier ~/.ssh/id_rsa.pub et collez une nouvelle ligne de ~devops/.ssh/authorized_keys en myserver.org serveur. Si ~devops/.ssh/authorized_keys n'existe pas, n'hésitez pas à le créer.

Un guide pratique lucide est disponible aquí .

44voto

JohnA Points 319
#!/usr/bin/expect -f

# connect via scp
spawn scp "user@example.com:/home/santhosh/file.dmp" /u01/dumps/file.dmp
#######################
expect {
  -re ".*es.*o.*" {
    exp_send "yes\r"
    exp_continue
  }
  -re ".*sword.*" {
    exp_send "PASSWORD\r"
  }
}
interact

http://blogs.oracle.com/SanthoshK/entry/automate_linux_scp_command

25voto

Veerendra Points 617

Pourquoi n'essayez-vous pas ça ?

password="your password"
username="username"
Ip="<IP>"
sshpass -p "$password" scp /<PATH>/final.txt $username@$Ip:/root/<PATH>

20voto

bsisco Points 651

Vous pouvez aussi utiliser rsync. Il semble mieux fonctionner pour les fichiers multiples que scp, à mon avis.

rsync -avzh /path/to/dir/ user@remote:/path/to/remote/dir/

Mise à jour

Vous pouvez utiliser rsync via ssh en ajoutant le commutateur '-e' :

rsync -avzh -e ssh /path/do/dir/ user@remote:/path/to/remote/dir/

10voto

Abhinav Gupta Points 61
#!/usr/bin/expect -f
spawn scp -r BASE.zip abhishek@192.168.1.115:/tmp
expect "password:"
send "wifinetworks\r"
expect "*\r"
expect "\r"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X