Je dois faire rsync par ssh et je veux le faire automatiquement sans avoir besoin de passer le mot de passe pour ssh manuellement.
Vous devez utiliser un fichier de clés sans mot de passe pour les connexions ssh scriptées. Ceci est évidemment un risque de sécurité, veillez à ce que le fichier de clés lui-même soit correctement sécurisé.
Instructions pour configurer un access ssh sans mot de passe
Utilise l’utilitaire de fournisseur de mot de passe ssh non interactif “sshpass”
Sur Ubuntu
sudo apt-get install sshpass
Commande à rsync
/usr/bin/rsync -ratlz --rsh="/usr/bin/sshpass -p password ssh -o SsortingctHostKeyChecking=no -l username" src_path dest_path
Vous pouvez éviter l’invite de mot de passe sur la commande rsync en définissant la variable d’environnement RSYNC_PASSWORD sur le mot de passe que vous souhaitez utiliser ou en utilisant l’option –password-file.
Si vous ne pouvez pas utiliser une clé publique / privée, vous pouvez utiliser:
#!/usr/bin/expect spawn rsync SRC DEST expect "password:" send "PASS\n" expect eof if [catch wait] { puts "rsync failed" exit 1 } exit 0
Vous devrez remplacer SRC et DEST par vos parameters source et destination rsync normaux et remplacer PASS par votre mot de passe. Assurez-vous simplement que ce fichier est stocké en toute sécurité!
une autre possibilité intéressante: 1. générer une paire de clés RSA ou DSA (comme cela a été décrit) 2. mettre la clé publique à l’hôte (comme cela a déjà été décrit) 3. exécuter:
rsync --partial --progress --rsh="ssh -i dsa_private_file" host_name@host:/home/me/d .
Remarque: -i fichier_sa_private qui est votre clé privée RSA / DSA
Fondamentalement, cette approche est très similaire à celle décrite par @Mad Scientist, mais vous n’avez pas à copier votre clé privée dans ~ / .ssh. En d’autres termes, il est utile pour les tâches ad hoc (access unique sans mot de passe)
utilisez une clé ssh:
regardez ssh-keygen et ssh-copy-id .
Après cela, vous pouvez utiliser une resync de cette façon:
rsync -a --stats --progress --delete /home/path server:path
Bien que vous l’ayez déjà mis en œuvre maintenant,
vous pouvez aussi utiliser n’importe quelle implémentation attendue (vous trouverez des alternatives dans Perl, Python: pexpect, paramiko, etc.)
La saisie automatique du mot de passe pour la commande rsync est difficile. Ma solution simple pour éviter le problème consiste à monter le dossier à sauvegarder. Utilisez ensuite une commande rsync locale pour sauvegarder le dossier monté.
mount -t cifs //server/source/ /mnt/source-tmp -o username=Username,password=password rsync -a /mnt/source-tmp /media/destination/ umount /mnt/source-tmp
J’utilise un fichier VBScript pour ce faire sur la plate-forme Windows, il me sert très bien.
set shell = CreateObject("WScript.Shell") shell.run"rsync -a [email protected]:/Users/Name/Projects/test ." WScript.Sleep 100 shell.SendKeys"Your_Password" shell.SendKeys "{ENTER}"
les œuvres suivantes pour moi
SSHPASS='myPassword' /usr/bin/rsync -a -r -p -o -g --progress --modify-window=1 --exclude /folderOne -s -u --rsh="/usr/bin/sshpass -p $SSHPASS ssh -o SsortingctHostKeyChecking=no -l root" source-path myDomain:dest-path >&2
Je devais installer sshpass
Suivant l’idée postée par Andrew Seaford, cela se fait en utilisant sshfs:
echo "SuperHardToGuessPass:P" | sshfs -o UserKnownHostsFile=/dev/null -o SsortingctHostKeyChecking=no [email protected]:/mypath/ /mnt/source-tmp/ -o workaround=rename -o password_stdin rsync -a /mnt/source-tmp/ /media/destination/ umount /mnt/source-tmp