Я пытаюсь настроить резервное копирование какой-либо папки с одного сервера (целевого сервера) на другой (сервер резервного копирования) с помощью rsync. Мне также нужно вызвать rsync с сервера резервного копирования, чтобы было легче поддерживать настройки резервного копирования для нескольких серверов в одном месте.
Для этого я пытаюсь добавить команду rsync в crontab на сервере резервного копирования, чтобы мои файлы периодически синхронизировались. Команда выглядит так:
rsync -av --delete target_server_user@target_server:/path/to/directory/ /path/to/directory
Насколько мне известно, rsync по умолчанию использует SSH для транспорта. Когда я запускаю команду вручную, она запрашивает пароль для remote_server_user
. Хотя это нормально для одноразовой ручной синхронизации, очевидно, что это не позволяет запланировать периодическую синхронизацию с использованием cron.
Итак, я создал пару ключей аутентификации на сервере резервного копирования с помощью ssh-keygen, добавил созданное удостоверение на целевой сервер с помощью ssh-copy-id. Но когда я пытаюсь вызвать rsync, он запрашивает пароль. Потом я узнал, что мне нужно добавить личность в ssh-agent. А потом я обнаружил, что ssh-agent даже не запущен на сервере резервного копирования, используя этот ответ.
Затем я запустил его с eval `ssh-agent -s`
, добавил идентичность с ssh-add path/to/identity
, проверил, что отступ добавлен ssh-add -L
и успешно выполните приведенную выше команду rsync вручную.
Однако после закрытия ssh-соединения с резервным сервером и повторного подключения от имени того же пользователя я получаю неработающий ssh-agent. И когда я запускаю его, я не вижу добавленных идентификаторов в выводе ssh-add -L
. И в результате команда rsync запрашивает пароль.
Это особенность сервера ubuntu (мне никогда не приходилось запускать ssh-agent вручную на моем рабочем столе ubuntu)?
И когда я исправлю ssh-agent и добавлю команду rsync выше в crontab, сможет ли он использовать идентификатор, добавленный в add-ssh
команда? Если ssh-agent и добавленные идентификаторы доступны только для вошедшего в систему пользователя, похоже, я иду в неправильном направлении.
Или, может быть, есть лучший способ настроить периодическую запланированную синхронизацию каталога?
Я попытался настроить rsync в режиме демона, создав все эти rsyncd.conf
, секреты и так далее. Но после успешного запуска этой простой команды rsync вручную мне кажется, что она делает то, что мне нужно, без особой настройки. За исключением неработающей авторизации ssh.
Обычно люди используют обходной путь для создания пары ключей ssh для конкретной службы, которая не защищена парольной фразой.
Для безопасности на удаленном сервере вы используете дополнительный параметры в ~/.authorized_keys
файл для наложения ограничений на доступ, предоставляемый этим закрытым ключом.
Например, параметры могут отличаться от того, с каким IP-адресом предоставляется доступ. from="10.9.8.7"
и вы можете ограничить запуск только rsync с command="/bin/rsync"
и предотвратить интерактивные сеансы входа в систему и тому подобное с помощью no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding
и получите энтри, который выглядит так:
~/.ssh/authorized_keys
command="/bin/rsync",from="10.9.8.7",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAxxxxx..more..public..key..data Comment=This key can only be used for remote backup
Итак, я смог настроить синхронизацию, явно указав путь к файлу идентификации в -e
флаг следующим образом. Решение даже проще, чем я хотел. В этом случае мне не нужно думать об управлении ssh-agent
и добавление личности.
rsync -ave "ssh -i /path/to/key" --delete target_server_user@target_server:/path/to/directory/ /path/to/directory
Полезный ответ: https://unix.stackexchange.com/a/127355