J'ai besoin de faire rsync
par ssh
et je veux le faire automatiquement sans qu'il soit nécessaire de passer le mot de passe pour ssh
manuellement.
Vous devez utiliser un fichier de clé sans phrase secrète pour les connexions ssh scriptées. Ceci est évidemment un risque pour la sécurité, veillez à ce que le fichier de clés lui-même soit correctement sécurisé.
Utilisez 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 StrictHostKeyChecking=no -l username" src_path dest_path
Vous pouvez éviter l'invite password password 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 de clé publique/privée, vous pouvez utiliser expect:
#!/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 paramètres de source et de destination rsync habituels et remplacer PASS par votre mot de passe. Assurez-vous simplement que ce fichier est stocké de manière sécurisée!
Utilisez une clé ssh.
Regardez ssh-keygen
et ssh-copy-id
.
Après cela, vous pouvez utiliser un rsync
de cette façon:
rsync -a --stats --progress --delete /home/path server:path
Une autre possibilité intéressante:
rsync --partial --progress --rsh = "ssh -i dsa_private_file" nom_hôte @ hôte:/home/me/d.
Remarque: - i dsa_private_file qui est votre clé privée RSA/DSA
Fondamentalement, cette approche est très similaire à celle décrite par @Mad Scientist, cependant vous n’avez pas à copier votre clé privée dans ~/.ssh. En d'autres termes, il est utile pour les tâches ad-hoc (accès sans mot de passe une fois)
Je travaille donc:
sshpass -p "password" rsync -ae "ssh -p remote_port_ssh" /local_dir remote_user@remote_Host:/remote_dir
Bien que vous l'ayez déjà implémenté maintenant,
vous pouvez aussi utiliser n'importe quelle implémentation attendue (vous trouverez des alternatives en 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 est de monter le dossier à sauvegarder. Utilisez ensuite une commande locale rsync 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
Ce qui suit fonctionne 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 StrictHostKeyChecking=no -l root" source-path myDomain:dest-path >&2
Je devais installer sshpass
J'utilise un fichier VBScript pour cela sur la plate-forme Windows, cela 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}"
La solution officielle (et les autres) étaient incomplètes lors de ma première visite. Je suis donc revenu, des années plus tard, pour publier cette approche alternative au cas où d'autres personnes arriveraient ici avec l'intention d'utiliser une paire de clés publique/privée:
Exécutez ceci à partir de la machine de sauvegarde cible, qui passe de la sauvegarde source à la sauvegarde cible.
rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' [email protected]:/home/user/Server/ /home/keith/Server/
Exécutez ceci à partir de la machine source, qui envoie la sauvegarde source à la sauvegarde cible.
rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' /home/user/Server/ [email protected]:/home/user/Server/
Et, si vous n'utilisez pas de port alternatif pour ssh, considérez les exemples plus élégants ci-dessous:
Exécutez ceci à partir de la machine de sauvegarde cible, qui passe de la sauvegarde source à la sauvegarde cible:
Sudo rsync -avi --delete [email protected]:/var/www/ /media/sdb1/backups/www/
Exécutez ceci à partir de la machine source, qui envoie la sauvegarde source à la sauvegarde cible:
Sudo rsync -avi --delete /media/sdb1/backups/www/ [email protected]:/var/www/
Si vous êtes toujours invité à entrer un mot de passe, vous devez vérifier votre configuration ssh dans /etc/ssh/sshd_config
et vérifier que les utilisateurs de source et de cible possèdent chacun la clé publique ssh des autres en les envoyant avec ssh-copy-id [email protected]
.
(Encore une fois, c'est pour utiliser des paires de clés ssh sans mot de passe, en tant qu'approche alternative, et non pour passer le mot de passe via un fichier.)