comment passer un mot de passe pour la commande rsync ssh

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 Name@192.168.1.100:/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 user@example.com:/mypath/ /mnt/source-tmp/ -o workaround=rename -o password_stdin rsync -a /mnt/source-tmp/ /media/destination/ umount /mnt/source-tmp