Często wykonuję kopie zapasowe na dysku lokalnym, który chcę codziennie synchronizować ze zdalnym serwerem.
Serwer docelowy jest skonfigurowany tylko dla dostępu SSH (bez hasła). Ponieważ mój podstawowy klucz SSH dla tego serwera jest chroniony hasłem, stworzyłem drugi klucz SSH (nie chroniony hasłem) + użytkownika do użycia w przypadku nienadzorowanych kopii zapasowych - w ten sposób nie muszę być obecny, aby wprowadzić moje hasło po uruchomieniu crona .
Używam cron i rsync, a wszystkie polecenia działają indywidualnie, ale nie działają w połączeniu.
Najdalszy zasięg, jaki mam podczas rozwiązywania problemów, jest uruchomiony
env -i sh -c "rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/"
co zwraca błąd
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]
Wszelkie wskazówki dotyczące dalszego rozwiązywania tego problemu?
Oto, co próbowałem do tej pory i nie mam pomysłów:
- Cron na pewno działa
ps aux | grep cron
Nic niezwykłego w / var / log / syslog
Sep 7 13:22:01 desktop CRON[6735]: (tom) CMD (sh /home/tom/Documents/Scripts/offsite-backup)
SSH w terminalu do zdalnego serwera, gdy działa użytkownik kopii zapasowej
ssh backups-user@XX.XX.XX.XX
- Uruchomienie polecenia w Terminalu działa idealnie
rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
Ręczne określenie ścieżki do klucza użytkownika kopii zapasowych nie ma wpływu
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/
Działa zastąpienie niedziałającego polecenia prostym poleceniem testowym
echo "Hello world" > ~/Desktop/test.txt
Krzyki / przekleństwa przy komputerze nie przyniosły żadnego efektu (ale chwilowo poczułem się lepiej).
Edycja 1:
Oto mój plik crontab i skrypt, który wywołuje.
...
# m h dom mon dow command
MAILTO=""
* * * * * sh /home/tom/Documents/Scripts/offsite-backup
i
#!/bin/bash
rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
Edycja 2:
Dla wyjaśnienia, /var/log/auth.log
na serwerze docelowym zawiera wiersz Sep 11 08:23:01 <hostname> CRON[24421]: pam_unix(cron:session): session closed for user root
To jest mylące, ponieważ nie uruchamiam już crona co minutę lokalnie, ale nowa pozycja wciąż pojawia się co minutę w logach serwera. Pliki Crontab dla wszystkich użytkowników (w tym root) na serwerze są puste i nic nie robią.
Ponadto użytkownik „tylko kopie zapasowe” został utworzony tylko na serwerze i z ograniczonymi prawami, z dedykowanym kluczem SSH skopiowanym na mój komputer. Zakładam, że jest to właściwa droga, ponieważ wszystko działa podczas ręcznego uruchamiania poleceń.
Plik crontab opublikowany powyżej jest dla mnie, użytkownika „tom” na moim komputerze stacjonarnym. Moim zamiarem jest wywołanie skryptu, który powinien zalogować się na serwerze jako użytkownik „tylko do tworzenia kopii zapasowych”. Właśnie próbowałem uruchomić skrypt kopii zapasowej (zamiast polecenia w nim zawartego) i udało mi się to połączyć i zadziałać. Uruchomiłem go na pulpicie jako użytkownik „tom”, ten sam użytkownik, który utworzył zadanie cron, które nie będzie działać. Oto dane wyjściowe z dziennika serwera odpowiadające udanemu logowaniu
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]...
. Czy jesteś w 100% przekonany, że ta linia logiczna pochodzi z serwera i że jest to poprawna linia? Crontab, który opublikowałeś, to crontab tylko kopii zapasowych ? Spróbuj też dodać plik tożsamości ręcznie:rsync .... -e 'ssh -i /home/user/.ssh/identity' ...
auth.log
tobie opublikowany w Edycji 2 dotyczy crona działającego na serwerze i nie powinien mieć nic wspólnego z próbami logowania. Czy możesz spróbować tail -f /var/log/auth.log
na serwerze, gdy próbujesz uruchomić skrypt przez crona? Nie jestem też pewien, czy to zadziała, ale czy możesz wypróbować swoje pierwsze env
polecenie, rsync .... -e 'ssh -vvv -i /home/user/.ssh/identity ...
aby sprawdzić, czy to wyrzuca więcej błędów?