Как выполнить безопасную rsync между серверами через незащищенную сеть

19

По сути, я спрашиваю, кто-нибудь сталкивался со средствами, которыми можно обернуть rsync внутри ssh.

В OpenSSH v4.9 + sftp есть несколько приятных опций, которые позволяют вам синхронизировать входящее соединение и тому подобное - и это решение, на которое я бы посмотрел, однако я застрял с RHEL, и ни RHEL4, ни RHEL5 не подходят для этой версии SSH.

Мое текущее решение состоит в том, чтобы добавить что-то подобное на стороне сервера, используя ключ пользователя клиента ...

сервер% cat ~ / .ssh / authorized_keys
command = "cd / srv / rsync / etl && tar --exclude './lost+found' -pcf - ./" ssh-rsa ...

... и тогда клиент будет ограничен одним и только одним ...

клиент% ssh -T -i $ {HOME} /. ssh / id_rsa oracle@database.com> sensative.tar

Это защищает как соединение, так и сервер (от клиента), однако неэффективно, поскольку все файлы будут извлекаться снова и снова.

Я делаю что-то подобное (или просто лучше) с помощью rsync.

Ксеркс
источник

Ответы:

18

Rsync поддерживает использование ssh в качестве транспорта

rsync -az /path/to/source username@host:/path/to/destination

некоторые старые версии rsync требуют явного указания ssh

rsync -aze ssh /path/to/source host:/path/to/destination

Альтернативой использованию rsync является Unison BC Pierce , который имеет функциональность, аналогичную rsync, но поддерживает локальный индекс на обоих концах, чтобы избежать необходимости обходить файловую систему для вычисления дельт

Дейв Чейни
источник
Спасибо за быстрый ответ! Я должен был упомянуть, что я тоже это исследовал - проблема (в моем случае) в том, что он не ограничивает / не поддерживает пользователя. Если бы можно было общаться со службой rsync через ssh (т. Е. Использовать синтаксис с двумя двоеточиями для определения удаленного) - это было бы идеально, но вышеприведенное работает только с одинарным двоеточием - т. Е. Через ssh, и, следовательно, без хромирования.
Ксеркс
Я забыл упомянуть - Unison выглядит хорошо, и я сохраню ссылку на него - однако в этом случае - я не могу установить что-либо, кроме того, что предлагает RHN - что является хромой, но вне моего контроля.
Ксеркс
Еще одно ограничение, которое я должен упомянуть, заключается в том, что соединение должно инициироваться клиентом - со стороны <i> вытягивания </ i>, а не с сервера. (Естественно, на стороне сервера было бы легко защитить сервер, так как клиент не имеет права голоса, но это не применимо к моей текущей проблеме).
Ксеркс
1
rsync -az сервер: / путь / путь / вкл / клиент?
Дейв Чейни
1
Почему chroot? Вы знаете, что chroot не так уж сильно повышает безопасность. Кроме того, если вы уже используете ssh, то rsync поверх ssh не снижает безопасность системы. Также подумайте, что rsync поверх ssh вызывает двоичный файл rsync на сервере. Вы можете защитить это так же, как и свою команду копирования.
Поль де Вриз
5

Хорошо, я наконец понял это, но решение не так элегантно, как я надеялся.

На стороне сервера, вам нужно добавить следующее в файл author_keys для соответствующего пользователя ...

no-pty, command="exit"

На клиенте вы можете создать туннель следующим образом ...

ssh -l username -fNTL 8073:server:873

Как только туннель установлен, вы можете rsync, как обычно - использование синтаксиса с двойной двоеточием невозможно - для localhost.

Номер локального порта, который вы выбираете (8073), совершенно необязателен, очевидно, просто помните, что это то, что вам нужно rsync для ...

rsync --port=8073 -a user@localhost::mySecureStore /srv/some/place/
Ксеркс
источник