Окрім усіх попередніх відповідей, ось одна, яка покладається на SSH-ключі з обмеженнями щодо того, що можна зробити під час входу за допомогою цього ключа.
На сервері A
У цьому випадку менш важливо, якщо ви створюєте окремого користувача або використовуєте одне з існуючих імен користувачів, хоча, якби це я, я створив би окремого користувача. Я буду використовувати ім’я користувача bkpuser
для обох серверів у наведених нижче прикладах.
Увійшовши в систему bkpuser
, створіть ключ SSH без пароля.
На сервері B
Увімкнути PubkeyAuthentication
в sshd_config
.
Створіть користувача bkpuser
. Встановіть дуже складний пароль або вимкніть вхід пароля для цього користувача (саме те, як ви це зробите, залежатиме від того, який ви використовуєте unix та distro). Справа в тому, що користувач повинен увійти в систему лише за допомогою ключа SSH. Переконайтеся, щоbkpuser
має доступ до читання до всіх каталогів та файлів, які потрібно створити резервну копію.
Скопіюйте загальнодоступну частину ключа, створеного на A - ~bkpuser/.ssh/authorized_keys
на B. Відредагуйте команду для автоматичного запуску команди під час з'єднання. Ця команда не повинна вказувати на скрипт оболонки; замість цього просто вставте скрипт оболонки в ключ. Також включіть обмеження, щоб ключ можна було використовувати лише з сервера А та жодного іншого сервера. У наведеному нижче прикладі я даю IP-адресу сервера A, 10.1.2.3
і я припускаю, що всі файли, під якими я хочу створити резервну копію /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.....
На сервері A
Якщо ви використовуєте одну з вкладок cron, яка підтримує @reboot
записи, додайте такий запис доbkpuser
s crontab за допомогою команди ssh -i ~bkpuser/.ssh/id_dsa serverB > backup.tar.gz
. Якщо це не дозволяє, встановіть його в будь-який час, коли вам подобається - якби це були мої дані, я б, мабуть, це робив щодня.