web-dev-qa-db-fra.com

Comment utiliser rsync via ssh dans cron?

J'ai un serveur virtuel privé sur lequel j'essaie de sauvegarder certains répertoires à partir de mon répertoire local /home.

J'ai préparé ce script:

#!/bin/bash

/usr/bin/rsync -rvvv /home/arkadiusz/scripts [email protected]:/home/backup/

/usr/bin/notify-send "Backup complete" "~/scripts -> vps" -i cryptkeeper

Dans la crontab de l'utilisateur, j'ai ajouté l'entrée:

*/1 * * * * /home/arkadiusz/scripts/vps.sh > /home/arkadiusz/cron-vps.log 2> /home/arkadiusz/cron-vps.error.log

Après l'exécution du script Shell, mon répertoire scripts n'apparaît pas dans /home/backup/ sur le serveur distant. Dans le fichier cron-vps.log, je ne vois que ceci:

opening connection using: ssh -l root XXX.XXX.26.106 rsync --server -vvvre.iLsfx . /home/backup/  (9 args)
[sender] _exit_cleanup(code=12, file=io.c, line=226): about to call exit(255)

Dans le fichier cron-vps.error.log, il s’avère qu’il s’agit d’un problème d’autorisation:

Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(226) [sender=3.1.1]

J'ai vérifié en plus l'état sshd sur mon serveur distant:

root@vpsXXXXXX:/home/backup# service sshd status
● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2017-04-12 01:04:09 CEST; 12h ago
 Main PID: 281 (sshd)
   CGroup: /system.slice/ssh.service
           └─281 /usr/sbin/sshd -D

...

Apr 12 13:41:01 vpsXXXXXX.ovh.net sshd[5019]: Failed password for root from XXX.XXX.232.122 port 21782 ssh2
Apr 12 13:41:01 vpsXXXXXX.ovh.net sshd[5019]: Failed password for root from XXX.XXX.232.122 port 21782 ssh2
Apr 12 13:41:01 vpsXXXXXX.ovh.net sshd[5019]: Connection closed by XXX.XXX.232.122 port 21782 [preauth]

Sur la base de ces journaux, cela semble être un problème d'autorisation, mais ma connexion SSH fonctionne lorsque j'essaie de me connecter à mon serveur distant avec cette commande:

ssh [email protected]

De plus, la commande rsync fonctionne dans un terminal sans mot de passe:

/usr/bin/rsync -rvvv /home/arkadiusz/scripts [email protected]:/home/backup/

Qu'est-ce que je fais mal?

5

Dans le fichier cron-vps.error.log, il s’agit d’un problème d’autorisation:

L'authentification et l'autorisation sont un problème différent. C'est l'authentification qui échoue (dans ce cas, le mot de passe, tel qu'il est visible dans les journaux).

Très probablement, vous avez configuré votre clé privée pour qu'elle soit chiffrée, mais vous ne remarquez pas qu'il s'agit de sessions normales, car vous l'avez stockée dans le ssh-agent. Cela fonctionne bien dans votre session, mais cela ne fonctionnera pas dans la session lancée à partir de votre crontab.

4
Jakuje