Selain semua jawaban sebelumnya, berikut adalah salah satu yang bergantung pada kunci SSH dengan batasan pada apa yang bisa dilakukan ketika masuk dengan kunci itu.
Di server A
Yang ini kurang penting jika Anda membuat pengguna terpisah atau menggunakan salah satu nama pengguna yang ada, meskipun jika itu saya, saya akan membuat pengguna terpisah. Saya akan menggunakan nama pengguna bkpuser
untuk kedua server dalam contoh saya di bawah ini.
Saat masuk bkpuser
, buat kunci SSH tanpa kata sandi.
Di server B
Aktifkan PubkeyAuthentication
di sshd_config
.
Buat pengguna bkpuser
. Tetapkan kata sandi yang sangat rumit, atau nonaktifkan login kata sandi untuk pengguna tersebut (cara Anda melakukannya tergantung pada unix dan distro yang Anda jalankan). Intinya, pengguna hanya harus login dengan kunci SSH. Pastikan yang bkpuser
memiliki akses baca ke semua direktori dan file yang ingin Anda buat cadangannya.
Salin bagian publik dari kunci yang dibuat pada A ke ~bkpuser/.ssh/authorized_keys
pada B. Edit untuk secara otomatis menjalankan perintah pada koneksi. Perintah itu seharusnya tidak menjadi pointer ke skrip shell; alih-alih masukkan skrip shell ke kunci secara langsung. Juga termasuk batasan sehingga kunci hanya dapat digunakan dari server A dan tidak ada server lain. Dalam contoh di bawah ini, saya memberikan server A alamat IP 10.1.2.3
dan saya berasumsi bahwa file yang ingin saya buat cadangan semuanya ada di bawah /data
.
from="10.1.2.3",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="cd /data;/usr/bin/tar -cf - *; /usr/bin/logger -t BACKUP -p daemon.info \"INFO: Backup-files on $HOST fetched from ${SSH_CLIENT%% *} by $USER\";" ssh-dss AA.....
Di server A
Jika Anda menggunakan salah satu tab cron yang mendukung @reboot
entri, tambahkan entri seperti itu ke bkpuser
s crontab dengan perintah ssh -i ~bkpuser/.ssh/id_dsa serverB > backup.tar.gz
. Jika itu tidak memungkinkan, atur kapan saja Anda suka - jika itu data saya, saya mungkin melakukannya setiap hari.