Не удается заставить rsync работать в режиме daemon-over-ssh

11

Я пытаюсь настроить rsync для копирования данных с сервера каждый день. Чтобы сделать систему максимально ограниченной, я пытаюсь использовать режим, описанный на странице руководства, как: «ИСПОЛЬЗОВАНИЕ ОСОБЕННОСТЕЙ RSYNC-DAEMON В СВЯЗИ С ДИСТАНЦИОННЫМ ОБОЛОЧКОМ»

Поэтому я поместил файл с именем rsyncd.conf в корневую домашнюю папку:

[root]
path = /
read only = true

и попытался скопировать / etc / passwd в качестве теста:

rsync -vv -e ssh myserver::root/etc/passwd .

Но я получаю следующее:

opening connection using: ssh myserver rsync --server --daemon . 
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(635) [receiver=3.0.3]

Причина, по которой я все это делаю, состоит в том, что, как только я получу это, я планирую ограничить доступ, указав команду

rsync --server --daemon .

в ~ / .ssh / authorized_keys

rjmunro
источник
Что находится в / var / log / secure или / var / log / messages на принимающем сервере?
Дейв Чейни
Это было: rsync: не удалось открыть файл конфигурации "/etc/rsyncd.conf": такого файла или каталога нет (2) Спасибо, что привело к решению, которое я опубликую в качестве ответа.
rjmunro

Ответы:

11

Кажется, есть ошибка в документации или нереализованность rsync. человек rsync говорит:

Rsync поддерживает подключение к хосту с помощью удаленной оболочки, а затем порождает одноразовый сервер «демон», который ожидает чтения своего файла конфигурации в домашнем каталоге удаленного пользователя.

но при подключении к root, согласно / var / log / messages, он искал в файле /etc/rsyncd.conf файл конфигурации (стандартное расположение файла rsyncd.conf, когда он не используется по SSH.

Мне пришлось заставить сервер SSH использовать правильный файл конфигурации, добавив

command="rsync --config=/root/rsyncd.conf --server --daemon ."

в /root/.ssh/authorized_keys.

Причина, по которой я не просто поместил конфигурацию в расположение по умолчанию, заключается в том, что я не хотел, чтобы кто-то случайно запустил нормальный демон rsync - я хочу, чтобы у демона был такой доступ, когда он получил правильный ключ ssh.

rjmunro
источник
5

rsync в режиме демона - это не то, что я бы посоветовал, если вы хотите максимально жестко заблокировать его. Вы хотите ограничить команду, которой разрешен запуск ключа SSH, и вызвать команду копирования с помощью этого ключа.

Чтобы узнать, какой командой ограничить ключ, запустите соответствующую командную строку rsync с небольшим изменением в команде ssh:

rsync -avz -e 'ssh -v' stuff somewhere:/place

Вы увидите строку в выводе отладки, такую ​​как:

debug1: Sending command: rsync --server -vlogDtprze.iLs . /place

Точная команда - это то, что вы хотите ограничить ключом, чтобы он мог запускаться в .ssh / authorized_keys:

command="rsync --server -vlogDtprze.iLs . /place" ssh-dss AAAASSHKEY=
MikeyB
источник
3
Я хочу иметь возможность делать разные резервные копии только для чтения частей системы - например, создавать резервные копии электронной почты и баз данных SQL каждый день, а другие вещи - раз в неделю. Мне потребовалась бы определенная команда и определенный ключ для каждой возможной резервной копии, и я не смог бы делать дополнительные резервные копии с такой же инфраструктурой.
rjmunro
2
Достаточно справедливо - я беру буквально «Чтобы сделать систему максимально ограниченной» :)
MikeyB
1
Вы можете поместить несколько команд в скрипт и передать скрипту параметры в качестве ввода первой строки.
Alecco
1
Есть ли способ генерировать серийный номер команды без необходимости проходить через отладочную информацию? '-vlogDtprze.iLs'
qodeninja