Eseguo backup frequenti su un'unità locale che desidero sincronizzare quotidianamente su un server remoto.
Il server di destinazione è configurato solo per l'accesso alla chiave SSH (nessuna password). Poiché la mia chiave SSH primaria per quel server è protetta da passphrase, ho creato una seconda chiave SSH (non protetta da passphrase) + utente da utilizzare per backup non presidiati - in questo modo non devo essere presente per inserire la mia passphrase quando cron viene eseguito .
Sto usando cron e rsync e tutti i comandi funzionano singolarmente, ma falliscono quando combinati.
Il più lontano che ho mentre la risoluzione dei problemi è in esecuzione
env -i sh -c "rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/"
che restituisce l'errore
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]
Qualche consiglio su come risolvere ulteriormente questo problema?
Ecco cosa ho provato finora e non ho idee:
- Cron è decisamente funzionante
ps aux | grep cron
Niente di insolito in / var / log / syslog
Sep 7 13:22:01 desktop CRON[6735]: (tom) CMD (sh /home/tom/Documents/Scripts/offsite-backup)
SSH in Terminale su server remoto mentre l'utente di backup funziona
ssh backups-user@XX.XX.XX.XX
- L'esecuzione del comando in Terminale funziona perfettamente
rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
La specifica manuale del percorso della chiave utente di backup non ha alcun effetto
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/
La sostituzione del comando non funzionante con un semplice comando di prova funziona
echo "Hello world" > ~/Desktop/test.txt
Gridare / imprecare contro il computer non ebbe alcun effetto (ma mi fece sentire temporaneamente meglio).
Modifica 1:
Ecco il mio file crontab e lo script che chiama.
...
# m h dom mon dow command
MAILTO=""
* * * * * sh /home/tom/Documents/Scripts/offsite-backup
e
#!/bin/bash
rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
Modifica 2:
Giusto per chiarire, /var/log/auth.log
sul server di destinazione contiene la riga Sep 11 08:23:01 <hostname> CRON[24421]: pam_unix(cron:session): session closed for user root
Questo è confuso perché non eseguo più cron ogni minuto localmente, ma una nuova voce appare comunque ogni minuto nei registri del server. I file crontab per tutti gli utenti (incluso root) sul server sono vuoti e non fanno nulla.
Inoltre, l'utente 'solo backup' è stato creato solo sul server e con diritti limitati, con una chiave SSH dedicata copiata sul mio computer desktop. Suppongo che sia la strada da percorrere perché tutto funziona quando si eseguono i comandi manualmente.
Il file crontab pubblicato sopra è per me, l'utente "tom" sul mio computer desktop. Il mio intento è di farlo chiamare lo script che dovrebbe accedere al server come "solo backup" dell'utente. Ho appena provato a eseguire lo script di backup (anziché il comando al suo interno) e si è connesso e funzionato correttamente. L'ho eseguito sul mio desktop come utente 'tom', stesso utente che ha creato il processo cron che non funzionerà. Ecco l'output dal registro del server corrispondente a tale accesso riuscito
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]...
. Sei sicuro al 100% che questa linea di log sia dal server e che sia la linea corretta? Il crontab che hai pubblicato è il crontab dei soli backup ? Inoltre, prova ad aggiungere manualmente il file di identità:rsync .... -e 'ssh -i /home/user/.ssh/identity' ...
auth.log
hai pubblicato sotto Modifica 2 è per cron in esecuzione sul server e non dovrebbe avere nulla a che fare con i tuoi tentativi di accesso. Puoi provare tail -f /var/log/auth.log
sul server mentre stai cercando di eseguire lo script tramite cron? Inoltre, non sono sicuro che funzioni, ma puoi provare il tuo primo env
comando rsync .... -e 'ssh -vvv -i /home/user/.ssh/identity ...
per vedere se sputa più errori?