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.
Réponses
Trop de publicités?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í .
#!/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
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/
- Réponses précédentes
- Plus de réponses