Günlük olarak uzak bir sunucuyla eşitlemek istediğim yerel bir sürücüye sık sık yedekleme yapıyorum.
Hedef sunucu yalnızca SSH anahtarı (parola yok) erişimi için yapılandırılmıştır. Bu sunucu için birincil SSH anahtarım parola korumalı olduğundan, katılımsız yedeklemeler için kullanmak üzere ikinci bir SSH anahtarı (parola korumalı değil) + kullanıcı oluşturdum - bu şekilde cron çalıştığında parolamı girmek için mevcut olmam gerekmiyor .
Cron ve rsync kullanıyorum ve tüm komutlar ayrı ayrı çalışıyor, ancak birleştirildiğinde başarısız oluyor.
Sorun giderme çalışırken elde ettiğim en uzak nokta
env -i sh -c "rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/"
bu da hatayı döndürür
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]
Bu sorunu nasıl giderebileceğinizle ilgili ipuçları var mı?
İşte şimdiye kadar denedim ve fikirlerim bitti:
- Cron kesinlikle çalışıyor
ps aux | grep cron
/ Var / log / syslog dosyasında olağandışı bir şey yok
Sep 7 13:22:01 desktop CRON[6735]: (tom) CMD (sh /home/tom/Documents/Scripts/offsite-backup)
Yedekleme kullanıcısı olarak terminaldeki SSH uzak sunucuya
ssh backups-user@XX.XX.XX.XX
- Komutun Terminal'de çalıştırılması mükemmel çalışıyor
rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
Yedekler kullanıcı anahtarının yolunu el ile belirtmenin bir etkisi yoktur
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/
Çalışmayan komutun basit bir test komutuyla değiştirilmesi işe yarıyor
echo "Hello world" > ~/Desktop/test.txt
Bilgisayarda bağırmanın / küfür etmenin hiçbir etkisi olmadı (ancak geçici olarak daha iyi hissetmemi sağladı).
Düzenleme 1:
İşte benim crontab dosyam ve çağırdığı komut dosyası.
...
# m h dom mon dow command
MAILTO=""
* * * * * sh /home/tom/Documents/Scripts/offsite-backup
ve
#!/bin/bash
rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
Düzenleme 2:
Sadece netleştirmek /var/log/auth.log
için, hedef sunucuda satır içerir Sep 11 08:23:01 <hostname> CRON[24421]: pam_unix(cron:session): session closed for user root
Bu kafa karıştırıcı çünkü artık her dakika yerel olarak cron çalıştırmıyorum, ancak sunucu günlüklerinde her dakika yeni bir giriş görünüyor. Sunucudaki tüm kullanıcılar için (root dahil) Crontab dosyaları boştur ve hiçbir şey yapmazlar.
Ayrıca, 'yalnızca yedeklemeler' kullanıcısı yalnızca sunucuda ve sınırlı haklara sahip olarak oluşturuldu ve özel bir SSH anahtarı masaüstü bilgisayarıma kopyalandı. Komutları manuel olarak çalıştırdığınızda her şeyin çalıştığı için bunun yol olduğunu varsayıyorum.
Yukarıda yayınlanan crontab dosyası benim için, masaüstü bilgisayarımda 'tom' kullanıcısı. Amacım sunucuya kullanıcı 'sadece yedek' olarak oturum açması gereken komut dosyasını çağırmaktır. Sadece (içindeki komut yerine) yedek komut dosyasını çalıştırmayı denedim ve başarıyla bağlandı ve çalıştı. Masaüstümde, çalışmayan cron işini yaratan 'tom' kullanıcısı olarak çalıştırdım. İşte bu başarılı girişe karşılık gelen sunucu günlüğünden çıktı
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]...
. Bu logline sunucusundan ve doğru satır olduğundan % 100 olumlu musunuz? Gönderdiğiniz crontab yalnızca yedeklerin crontab'ı mı? Ayrıca, elle kimlik dosyasını eklemeyi deneyin:rsync .... -e 'ssh -i /home/user/.ssh/identity' ...
auth.log
Edit 2 altında yayınladığınız bu satır sunucuda çalışan cron içindir ve giriş denemenizle ilgisi yoktur. tail -f /var/log/auth.log
Komut dosyasını cron üzerinden çalıştırmaya çalışırken sunucuda deneyebilir misiniz? Ayrıca, bunun işe yarayıp yaramayacağından emin değilim, ancak daha fazla hata verip vermediğini görmek için ilk env
komutunuzu deneyebilir misiniz rsync .... -e 'ssh -vvv -i /home/user/.ssh/identity ...
?