Ich mache häufig Backups auf einem lokalen Laufwerk, das ich täglich mit einem Remote-Server synchronisieren möchte.
Der Zielserver ist nur für den SSH-Schlüsselzugriff (kein Kennwort) konfiguriert. Da mein primärer SSH-Schlüssel für diesen Server durch Passphrasen geschützt ist, habe ich einen zweiten SSH-Schlüssel (nicht durch Passphrasen geschützt) + Benutzer erstellt, der für unbeaufsichtigte Sicherungen verwendet werden kann. Auf diese Weise muss ich nicht anwesend sein, um meine Passphrase einzugeben, wenn cron ausgeführt wird .
Ich verwende cron und rsync und alle Befehle funktionieren einzeln, scheitern jedoch, wenn sie kombiniert werden.
Die am weitesten entfernte während der Fehlerbehebung
env -i sh -c "rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/"
Das gibt den Fehler zurück
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]
Irgendwelche Tipps zur weiteren Fehlerbehebung?
Folgendes habe ich bisher versucht und mir fehlen die Ideen:
- Cron rennt definitiv
ps aux | grep cron
Nichts ungewöhnliches in / var / log / syslog
Sep 7 13:22:01 desktop CRON[6735]: (tom) CMD (sh /home/tom/Documents/Scripts/offsite-backup)
SSH im Terminal zum Remote-Server, während der Sicherungsbenutzer arbeitet
ssh backups-user@XX.XX.XX.XX
- Das Ausführen des Befehls in Terminal funktioniert einwandfrei
rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
Die manuelle Angabe des Pfads zum Backup-Benutzerschlüssel hat keine Auswirkung
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/
Das Ersetzen des nicht funktionierenden Befehls durch einen einfachen Testbefehl funktioniert
echo "Hello world" > ~/Desktop/test.txt
Schreien / Fluchen am Computer hatte keine Auswirkung (aber ich fühlte mich vorübergehend besser).
Bearbeiten 1:
Hier ist meine crontab-Datei und das Skript, das sie aufruft.
...
# m h dom mon dow command
MAILTO=""
* * * * * sh /home/tom/Documents/Scripts/offsite-backup
und
#!/bin/bash
rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
Bearbeiten 2:
Nur zur Verdeutlichung, /var/log/auth.log
auf dem Zielserver steht die Zeile. Sep 11 08:23:01 <hostname> CRON[24421]: pam_unix(cron:session): session closed for user root
Dies ist verwirrend, da ich nicht mehr jede Minute lokal cron laufen lasse, aber trotzdem jede Minute ein neuer Eintrag in den Serverprotokollen erscheint. Crontab-Dateien für alle Benutzer (einschließlich Root) auf dem Server sind leer und führen keine Aktionen aus .
Außerdem wurden Benutzer-Backups nur auf dem Server und mit eingeschränkten Rechten erstellt, wobei ein dedizierter SSH-Schlüssel auf meinen Desktop-Computer kopiert wurde. Ich gehe davon aus, dass dies der richtige Weg ist, da alles funktioniert, wenn die Befehle manuell ausgeführt werden.
Die oben angegebene crontab-Datei ist für mich, Benutzer 'tom', auf meinem Desktop-Computer. Ich möchte, dass es das Skript aufruft, das sich als Benutzer "Nur-Backups" beim Server anmelden soll. Ich habe gerade versucht, das Backup-Skript auszuführen (und nicht den darin enthaltenen Befehl), und es hat erfolgreich eine Verbindung hergestellt und funktioniert. Ich habe es auf meinem Desktop als Benutzer 'tom' ausgeführt, der auch den Cron-Job erstellt hat, der nicht funktioniert. Hier ist die Ausgabe aus dem Serverprotokoll, die dieser erfolgreichen Anmeldung entspricht
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]...
. Sind Sie zu 100% sicher, dass diese Protokollzeile vom Server stammt und die richtige Zeile ist? Die Crontab, die Sie gepostet haben, ist die Crontab nur für Backups ? Versuchen Sie auch, die Identität Datei manuell hinzuzufügen:rsync .... -e 'ssh -i /home/user/.ssh/identity' ...
auth.log
Ihrem Beitrag unter "Bearbeiten 2" für Cron bestimmt, die auf dem Server ausgeführt wird, und sollte nichts mit Ihren Anmeldeversuchen zu tun haben. Können Sie es tail -f /var/log/auth.log
auf dem Server versuchen, während Sie versuchen, das Skript über cron auszuführen? Ich bin mir auch nicht sicher, ob dies funktionieren würde, aber können Sie Ihren ersten env
Befehl mit versuchen, um rsync .... -e 'ssh -vvv -i /home/user/.ssh/identity ...
zu sehen, ob er mehr Fehler ausgibt?