Je fais des sauvegardes fréquentes sur un disque local que je souhaite synchroniser quotidiennement avec un serveur distant.
Le serveur cible est configuré pour l'accès par clé SSH (pas de mot de passe) uniquement. Étant donné que ma clé SSH principale pour ce serveur est protégée par une phrase secrète, j'ai créé une deuxième clé SSH (non protégée par une phrase secrète) + utilisateur à utiliser pour les sauvegardes sans assistance - de cette façon, je n'ai pas besoin d'être présent pour saisir ma phrase secrète lors de l'exécution de cron .
J'utilise cron et rsync, et toutes les commandes fonctionnent individuellement, mais échouent lorsqu'elles sont combinées.
Le plus loin que j'ai obtenu pendant le dépannage est en cours d'exécution
env -i sh -c "rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/"
qui renvoie l'erreur
Permission denied (publickey).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(226) [sender=3.1.0]
Des conseils sur la façon de résoudre ce problème davantage?
Voici ce que j'ai essayé jusqu'à présent et je suis à court d'idées:
- Cron tourne définitivement
ps aux | grep cron
Rien d'inhabituel dans / var / log / syslog
Sep 7 13:22:01 desktop CRON[6735]: (tom) CMD (sh /home/tom/Documents/Scripts/offsite-backup)
SSH dans le terminal vers le serveur distant pendant le travail de l'utilisateur de sauvegarde
ssh backups-user@XX.XX.XX.XX
- L'exécution de la commande dans Terminal fonctionne parfaitement
rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
La spécification manuelle du chemin d'accès à la clé de sauvegarde-utilisateur n'a aucun effet
rsync -lrstRO --delete --exclude 'lost+found' -e 'ssh -i /home/tom/.ssh/backups-only' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
Remplacer la commande non fonctionnelle par une commande de test simple fonctionne
echo "Hello world" > ~/Desktop/test.txt
Crier / jurer devant l'ordinateur n'a eu aucun effet (mais m'a fait me sentir mieux temporairement).
Modifier 1:
Voici mon fichier crontab et le script qu'il appelle.
...
# m h dom mon dow command
MAILTO=""
* * * * * sh /home/tom/Documents/Scripts/offsite-backup
et
#!/bin/bash
rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
Modifier 2:
Juste pour clarifier, /var/log/auth.log
sur le serveur cible contient la ligne Sep 11 08:23:01 <hostname> CRON[24421]: pam_unix(cron:session): session closed for user root
C'est déroutant car je n'exécute plus cron toutes les minutes localement, mais une nouvelle entrée apparaît toujours toutes les minutes dans les journaux du serveur. Fichiers Crontab pour tous utilisateurs (y compris root) sur le serveur sont vides et ne font rien.
De plus, les «sauvegardes uniquement» de l'utilisateur ont été créées uniquement sur le serveur et avec des droits limités, avec une clé SSH dédiée copiée sur ma machine de bureau. Je suppose que c'est la voie à suivre car tout fonctionne lors de l'exécution manuelle des commandes.
Le fichier crontab affiché ci-dessus est pour moi, l'utilisateur 'tom' sur ma machine de bureau. Mon intention est de le faire appeler le script qui devrait se connecter au serveur en tant qu'utilisateur «sauvegardes uniquement». J'ai juste essayé d'exécuter le script de sauvegarde (plutôt que la commande à l'intérieur) et il a réussi à se connecter et à fonctionner. Je l'ai exécuté sur mon bureau en tant qu'utilisateur 'tom', le même utilisateur qui a créé le travail cron qui ne fonctionnera pas. Voici la sortie du journal du serveur correspondant à cette connexion réussie
Sep 11 08:35:31 <hostname> sshd[25071]: error: Could not load host key: /etc/ssh/ssh_host_ed25519_key
Sep 11 08:35:32 <hostname> sshd[25071]: Accepted publickey for backups-only from <desktop IP> port 54242 ssh2: RSA e2:e6:07:27:c1:continues...
Sep 11 08:35:32 <hostname> sshd[25071]: pam_unix(sshd:session): session opened for user backups-only by (uid=0)
Sep 11 08:35:32 <hostname> systemd-logind[638]: New session 12 of user backups-only.
Sep 11 08:36:00 <hostname> sshd[25133]: Received disconnect from <desktop IP>: 11: disconnected by user
Sep 11 08:36:00 <hostname> sshd[25071]: pam_unix(sshd:session): session closed for user backups-only
Sep 7 14:45:01 <hostname> CRON[18716]: pam_unix(cron:session): session closed for user root
Sep 7 16:06:02 <hostname> sshd[6747]...
. Êtes-vous sûr à 100% que cette ligne de connexion provient du serveur et que c'est la bonne ligne? La crontab que vous avez publiée est la crontab des sauvegardes uniquement ? Essayez également d'ajouter le fichier d'identité manuellement:rsync .... -e 'ssh -i /home/user/.ssh/identity' ...
auth.log
vous avez publiée sous Edit 2 est destinée à l'exécution de cron sur le serveur et ne devrait avoir rien à voir avec vos tentatives de connexion. Pouvez-vous essayer tail -f /var/log/auth.log
sur le serveur pendant que vous essayez d'exécuter le script via cron? De plus, je ne sais pas si cela fonctionnerait, mais pouvez-vous essayer votre première env
commande avec rsync .... -e 'ssh -vvv -i /home/user/.ssh/identity ...
pour voir si elle génère plus d'erreurs?